diff --git a/DEPS b/DEPS index fe19d652..b4a68586 100644 --- a/DEPS +++ b/DEPS
@@ -86,7 +86,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '87cc90dfaaf78e306eb4758bfdcb4c8977de4452', + 'angle_revision': 'e30edd6fcb9625e62985548917340360811e0d93', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build tools # and whatever else without interference from each other. @@ -98,7 +98,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': '94ed4456bfe64ea045be24c66966d814b73fa7ac', + 'pdfium_revision': '14768f3264a4cff8ca0096a27e41f1861b2c422b', # 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. @@ -332,7 +332,7 @@ }, 'src/third_party/dom_distiller_js/dist': - Var('chromium_git') + '/chromium/dom-distiller/dist.git' + '@' + '7a530fc00184ee28e79a2b45270906cacaf00d3b', + Var('chromium_git') + '/chromium/dom-distiller/dist.git' + '@' + '60b46718e28f553ab57e3d2bbda5b3b41456f417', 'src/third_party/elfutils/src': { 'url': Var('chromium_git') + '/external/elfutils.git' + '@' + '249673729a7e5dbd5de4f3760bdcaa3d23d154d7', @@ -639,7 +639,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '05591bbeae6592fd924caec8e728a4ea86cbb8c9', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '844ce8bb3ac1c5cbc31dd0026cfaf6694ddee631', # commit position 20628 + Var('webrtc_git') + '/src.git' + '@' + '1aa285974b6b2c5d1afe44b3eafe08f4b80837ed', # commit position 20628 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
diff --git a/android_webview/common/crash_reporter/crash_keys.cc b/android_webview/common/crash_reporter/crash_keys.cc index 3662ad04a..ad76719d 100644 --- a/android_webview/common/crash_reporter/crash_keys.cc +++ b/android_webview/common/crash_reporter/crash_keys.cc
@@ -37,10 +37,6 @@ {kShutdownType, kSmallSize}, {kBrowserUnpinTrace, kMediumSize}, - // content/: - {"discardable-memory-allocated", kSmallSize}, - {"discardable-memory-free", kSmallSize}, - {"total-discardable-memory-allocated", kSmallSize}, {kViewCount, kSmallSize}, // media/:
diff --git a/ash/DEPS b/ash/DEPS index 286f4dd..e144dec 100644 --- a/ash/DEPS +++ b/ash/DEPS
@@ -106,6 +106,9 @@ "touch_transformer_controller\.*": [ "+ash/host" ], + "window_manager.cc": [ + "+ash/host/ash_window_tree_host.h" + ], "window_manager_service.cc": [ "+chromeos/cryptohome" ],
diff --git a/ash/display/display_synchronizer.cc b/ash/display/display_synchronizer.cc index 6b5aa42..952f764 100644 --- a/ash/display/display_synchronizer.cc +++ b/ash/display/display_synchronizer.cc
@@ -4,11 +4,13 @@ #include "ash/display/display_synchronizer.h" +#include "ash/display/mirror_window_controller.h" #include "ash/host/ash_window_tree_host.h" #include "ash/shell.h" #include "services/ui/public/interfaces/window_manager_constants.mojom.h" #include "ui/aura/mus/window_manager_delegate.h" #include "ui/aura/mus/window_tree_host_mus.h" +#include "ui/base/ui_base_switches_util.h" #include "ui/display/manager/display_manager.h" #include "ui/display/manager/managed_display_info.h" @@ -60,10 +62,24 @@ displays.push_back(display_manager->GetDisplayAt(i)); metrics.push_back(GetMetricsForDisplay(displays[i].id())); } - const std::vector<display::Display>& mirrors = - display_manager->software_mirroring_display_list(); - for (size_t i = 0; i < mirrors.size(); ++i) - metrics.push_back(GetMetricsForDisplay(mirrors[i].id())); + std::vector<display::Display> mirrors; + MirrorWindowController* mirror_window_controller = + Shell::Get()->window_tree_host_manager()->mirror_window_controller(); + for (const auto& mirror : + display_manager->software_mirroring_display_list()) { + if (::switches::IsMusHostingViz()) { + // If mus is hosting viz, the window server handle mirrors internally. + mirrors.push_back(mirror); + metrics.push_back(GetMetricsForDisplay(mirror.id())); + } else if (mirror_window_controller->GetAshWindowTreeHostForDisplayId( + mirror.id())) { + // Otherwise, if MirrorWindowController constructed a window tree host + // the window server should construct a normal ws::Display for the mirror. + displays.push_back(mirror); + metrics.push_back(GetMetricsForDisplay(mirror.id())); + } + } + window_manager_client_->SetDisplayConfiguration( displays, std::move(metrics), WindowTreeHostManager::GetPrimaryDisplayId(), mirrors);
diff --git a/ash/display/mirror_window_controller.cc b/ash/display/mirror_window_controller.cc index 6d34fdf3..c18ddda 100644 --- a/ash/display/mirror_window_controller.cc +++ b/ash/display/mirror_window_controller.cc
@@ -13,6 +13,7 @@ #include "ash/host/ash_window_tree_host.h" #include "ash/host/ash_window_tree_host_init_params.h" #include "ash/host/root_window_transformer.h" +#include "ash/public/cpp/config.h" #include "ash/root_window_settings.h" #include "ash/shell.h" #include "base/strings/stringprintf.h" @@ -23,6 +24,7 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_tree_host.h" #include "ui/base/layout.h" +#include "ui/base/ui_base_switches_util.h" #include "ui/compositor/reflector.h" #include "ui/display/display_layout.h" #include "ui/display/manager/display_manager.h" @@ -212,19 +214,20 @@ host_info->ash_host->SetRootWindowTransformer(std::move(transformer)); mirror_window->SetBounds(host->window()->bounds()); mirror_window->Show(); - if (reflector_) { - reflector_->AddMirroringLayer(mirror_window->layer()); - } else if (aura::Env::GetInstance()->context_factory_private()) { - reflector_ = - aura::Env::GetInstance() - ->context_factory_private() - ->CreateReflector( - Shell::GetPrimaryRootWindow()->GetHost()->compositor(), - mirror_window->layer()); - } else { - // TODO: Config::MUS needs to support reflector. - // http://crbug.com/601869. - NOTIMPLEMENTED(); + // The classic config creates the accelerated widget synchronously. Mus + // (without viz) creates the reflector in OnAcceleratedWidgetOverridden. + if (host->GetAcceleratedWidget() != gfx::kNullAcceleratedWidget) { + DCHECK_EQ(Shell::GetAshConfig(), Config::CLASSIC); + if (reflector_) { + reflector_->AddMirroringLayer(mirror_window->layer()); + } else if (aura::Env::GetInstance()->context_factory_private()) { + reflector_ = + aura::Env::GetInstance() + ->context_factory_private() + ->CreateReflector( + Shell::GetPrimaryRootWindow()->GetHost()->compositor(), + mirror_window->layer()); + } } } else { AshWindowTreeHost* ash_host = @@ -318,6 +321,22 @@ } } +void MirrorWindowController::OnAcceleratedWidgetOverridden( + aura::WindowTreeHost* host) { + DCHECK_NE(host->GetAcceleratedWidget(), gfx::kNullAcceleratedWidget); + DCHECK_NE(Shell::GetAshConfig(), Config::CLASSIC); + DCHECK(!switches::IsMusHostingViz()); + MirroringHostInfo* info = mirroring_host_info_map_[host->GetDisplayId()]; + if (reflector_) { + reflector_->AddMirroringLayer(info->mirror_window->layer()); + } else if (aura::Env::GetInstance()->context_factory_private()) { + reflector_ = + aura::Env::GetInstance()->context_factory_private()->CreateReflector( + Shell::GetPrimaryRootWindow()->GetHost()->compositor(), + info->mirror_window->layer()); + } +} + display::Display MirrorWindowController::GetDisplayForRootWindow( const aura::Window* root) const { for (const auto& pair : mirroring_host_info_map_) { @@ -335,7 +354,8 @@ AshWindowTreeHost* MirrorWindowController::GetAshWindowTreeHostForDisplayId( int64_t id) { - CHECK_EQ(1u, mirroring_host_info_map_.count(id)); + if (mirroring_host_info_map_.count(id) == 0) + return nullptr; return mirroring_host_info_map_[id]->ash_host.get(); }
diff --git a/ash/display/mirror_window_controller.h b/ash/display/mirror_window_controller.h index 5b4eb12b..f350df3 100644 --- a/ash/display/mirror_window_controller.h +++ b/ash/display/mirror_window_controller.h
@@ -63,6 +63,7 @@ // aura::WindowTreeHostObserver overrides: void OnHostResized(aura::WindowTreeHost* host) override; + void OnAcceleratedWidgetOverridden(aura::WindowTreeHost* host) override; // Returns the display::Display for the mirroring root window. display::Display GetDisplayForRootWindow(const aura::Window* root) const;
diff --git a/ash/display/window_tree_host_manager.cc b/ash/display/window_tree_host_manager.cc index 22384677..cca2c80e 100644 --- a/ash/display/window_tree_host_manager.cc +++ b/ash/display/window_tree_host_manager.cc
@@ -284,7 +284,10 @@ AshWindowTreeHost* WindowTreeHostManager::GetAshWindowTreeHostForDisplayId( int64_t display_id) { const auto host = window_tree_hosts_.find(display_id); - return host == window_tree_hosts_.end() ? nullptr : host->second; + if (host != window_tree_hosts_.end()) + return host->second; + return mirror_window_controller_->GetAshWindowTreeHostForDisplayId( + display_id); } aura::Window::Windows WindowTreeHostManager::GetAllRootWindows() {
diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc index 0188cf3..989d17f 100644 --- a/ash/extended_desktop_unittest.cc +++ b/ash/extended_desktop_unittest.cc
@@ -336,6 +336,10 @@ } TEST_F(ExtendedDesktopTest, Capture) { + // This test deals with input events but not visuals so don't throttle input + // on visuals. + aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); + UpdateDisplay("1000x600,600x400"); aura::Window::Windows root_windows = Shell::GetAllRootWindows(); @@ -819,6 +823,9 @@ } TEST_F(ExtendedDesktopTest, PassiveGrab) { + // This test deals with input events but not visuals so don't throttle input + // on visuals. + aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); EventLocationRecordingEventHandler event_handler; ash::Shell::Get()->AddPreTargetHandler(&event_handler);
diff --git a/ash/window_manager.cc b/ash/window_manager.cc index f76a2fe..16b91d3 100644 --- a/ash/window_manager.cc +++ b/ash/window_manager.cc
@@ -12,8 +12,10 @@ #include "ash/accelerators/accelerator_handler.h" #include "ash/accelerators/accelerator_ids.h" +#include "ash/display/window_tree_host_manager.h" #include "ash/drag_drop/drag_image_view.h" #include "ash/event_matcher_util.h" +#include "ash/host/ash_window_tree_host.h" #include "ash/public/cpp/config.h" #include "ash/public/cpp/shelf_types.h" #include "ash/public/cpp/window_pin_type.h" @@ -337,10 +339,13 @@ void WindowManager::OnWmAcceleratedWidgetAvailableForDisplay( int64_t display_id, gfx::AcceleratedWidget widget) { - auto* window = Shell::GetRootWindowForDisplayId(display_id); - if (window) { - auto* host = static_cast<aura::WindowTreeHostMus*>(window->GetHost()); - host->OverrideAcceleratedWidget(widget); + WindowTreeHostManager* manager = Shell::Get()->window_tree_host_manager(); + AshWindowTreeHost* host = + manager->GetAshWindowTreeHostForDisplayId(display_id); + // The display may have been destroyed before getting this async callback. + if (host && host->AsWindowTreeHost()) { + static_cast<aura::WindowTreeHostMus*>(host->AsWindowTreeHost()) + ->OverrideAcceleratedWidget(widget); } }
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index da850d37..5f5f438a 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc
@@ -2113,6 +2113,8 @@ } TEST_F(SplitViewWindowSelectorTest, Dragging) { + aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); + ui::test::EventGenerator& generator = GetEventGenerator(); std::unique_ptr<aura::Window> right_window = CreateTestWindow();
diff --git a/base/android/java/src/org/chromium/base/StrictModeContext.java b/base/android/java/src/org/chromium/base/StrictModeContext.java index cb06fedf..beaaac0 100644 --- a/base/android/java/src/org/chromium/base/StrictModeContext.java +++ b/base/android/java/src/org/chromium/base/StrictModeContext.java
@@ -63,6 +63,16 @@ return new StrictModeContext(oldPolicy); } + /** + * Convenience method for disabling StrictMode for slow calls with try-with-resources. + */ + public static StrictModeContext allowSlowCalls() { + StrictMode.ThreadPolicy oldPolicy = StrictMode.getThreadPolicy(); + StrictMode.setThreadPolicy( + new StrictMode.ThreadPolicy.Builder(oldPolicy).permitCustomSlowCalls().build()); + return new StrictModeContext(oldPolicy); + } + @Override public void close() { if (mThreadPolicy != null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java index c22161d..3289ef22 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -173,6 +173,8 @@ public static final String CHROME_HOME_PROMO = "ChromeHomePromo"; public static final String CHROME_HOME_PROMO_INFO_ONLY = "ChromeHomePromoInfoOnly"; public static final String CHROME_HOME_PROMO_ON_STARTUP = "ChromeHomePromoOnStartup"; + public static final String CHROME_HOME_PULL_TO_REFRESH_IPH_AT_TOP = + "ChromeHomePullToRefreshIphAtTop"; public static final String CHROME_HOME_SHOW_GOOGLE_G_WHEN_URL_CLEARED = "ChromeHomeShowGoogleGWhenUrlCleared"; public static final String CHROME_HOME_SURVEY = "ChromeHomeSurvey";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java index fe51583..c41007cc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java
@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.snackbar.SnackbarManager; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.BottomToolbarPhone; import org.chromium.chrome.browser.util.ViewUtils; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.StateChangeReason; @@ -70,6 +71,7 @@ private final LogoView mLogoView; private final LogoDelegateImpl mLogoDelegate; private final LocationBarPhone mLocationBar; + private final BottomToolbarPhone mToolbarView; private final ViewGroup mControlContainerView; private final View mToolbarPullHandle; private final View mToolbarShadow; @@ -231,6 +233,7 @@ mRecyclerView.setOnTouchListener(touchListener); mControlContainerView = (ViewGroup) activity.findViewById(R.id.control_container); + mToolbarView = (BottomToolbarPhone) activity.findViewById(R.id.toolbar); mToolbarPullHandle = activity.findViewById(R.id.toolbar_handle); mToolbarShadow = activity.findViewById(R.id.bottom_toolbar_shadow); mLogoDelegate = new LogoDelegateImpl(navigationDelegate, mLogoView, profile); @@ -407,6 +410,7 @@ mControlContainerView.setTranslationY(0); mToolbarPullHandle.setTranslationY(0); mToolbarShadow.setTranslationY(0); + mToolbarView.setShownInNtp(false); ViewUtils.setAncestorsShouldClipChildren(mControlContainerView, true); mRecyclerView.setAlpha(1.0f); mRecyclerView.setVisibility(View.VISIBLE); @@ -447,6 +451,12 @@ mToolbarPullHandle.setTranslationY(-toolbarOffset); mToolbarShadow.setTranslationY(-toolbarOffset); + if (toolbarOffset == 0.0f || toolbarOffset == sheetHeightPx) { + mToolbarView.setShownInNtp(false); + } else { + mToolbarView.setShownInNtp(true); + } + // Fade out the whole RecyclerView when the URL bar is focused, and fade it in when it loses // focus. final float alpha;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java index ff225b5e..6f0c04d7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java
@@ -216,6 +216,9 @@ /** A handle to the {@link ChromeActivity} this toolbar exists in. */ private ChromeActivity mActivity; + /** Whether the toolbar is currently being shown in the NTP. */ + private boolean mShownInNtp; + /** * Constructs a BottomToolbarPhone object. * @param context The Context in which this View object is created. @@ -912,6 +915,16 @@ ApiCompatibilityUtils.getPaddingEnd(otherToolbar), otherToolbar.getPaddingBottom()); } + /** + * @param shownInNtp Whether the toolbar is currently being shown in the NTP. + */ + public void setShownInNtp(boolean shownInNtp) { + if (shownInNtp == mShownInNtp) return; + + mShownInNtp = shownInNtp; + updateToolbarBackground(mVisualState); + } + @Override protected void onAccessibilityStatusChanged(boolean enabled) { setUseExpandButton(); @@ -1046,6 +1059,13 @@ return ApiCompatibilityUtils.getColor(getResources(), DeviceClassManager.enableAccessibilityLayout() ? R.color.incognito_primary_color : R.color.modern_primary_color); + } else if (visualState == VisualState.NORMAL && mShownInNtp) { + // TODO(twellington): Ideally the VisualState would be set to NEW_TAB_NORMAL and that + // would be used to set the toolbar background. The VisualState is used for some toolbar + // animations that we don't run on BottomToolbarPhone. Those animations need to be + // reworked before the VisualState can be set to NEW_TAB_NORMAL when the Chrome Home NTP + // is showing. + return Color.TRANSPARENT; } else if (visualState == VisualState.NORMAL || visualState == VisualState.TAB_SWITCHER_NORMAL) { return ApiCompatibilityUtils.getColor(getResources(), R.color.modern_primary_color);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java index af6fa0c..53425ff 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -55,7 +55,7 @@ import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.browser.widget.FadingBackgroundView; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentController.ContentType; -import org.chromium.chrome.browser.widget.textbubble.ViewAnchoredTextBubble; +import org.chromium.chrome.browser.widget.textbubble.TextBubble; import org.chromium.content.browser.BrowserStartupController; import org.chromium.content.browser.ContentViewCore; import org.chromium.content_public.browser.LoadUrlParams; @@ -1702,7 +1702,7 @@ * @return The bottom sheet's help bubble if it exists. */ @VisibleForTesting - public @Nullable ViewAnchoredTextBubble getHelpBubbleForTests() { + public @Nullable TextBubble getHelpBubbleForTests() { return getIphBubbleController().getHelpBubbleForTests(); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java index 774ca1a..a930072 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java
@@ -5,8 +5,10 @@ package org.chromium.chrome.browser.widget.bottomsheet; import android.content.Context; +import android.graphics.Rect; import android.support.annotation.Nullable; import android.view.View; +import android.view.View.OnLayoutChangeListener; import android.widget.PopupWindow.OnDismissListener; import org.chromium.base.Callback; @@ -22,6 +24,7 @@ import org.chromium.chrome.browser.toolbar.BottomToolbarPhone; import org.chromium.chrome.browser.widget.ViewHighlighter; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.StateChangeReason; +import org.chromium.chrome.browser.widget.textbubble.TextBubble; import org.chromium.chrome.browser.widget.textbubble.ViewAnchoredTextBubble; import org.chromium.components.feature_engagement.EventConstants; import org.chromium.components.feature_engagement.FeatureConstants; @@ -41,7 +44,7 @@ */ private static final String HELP_BUBBLE_TIMEOUT_PARAM_NAME = "x_iph-timeout-duration-ms"; - private ViewAnchoredTextBubble mHelpBubble; + private TextBubble mHelpBubble; private LayoutManagerChrome mLayoutManager; private BottomToolbarPhone mToolbar; private View mControlContainer; @@ -67,7 +70,7 @@ mBottomSheet.addObserver(new EmptyBottomSheetObserver() { @Override public void onSheetOpened(@StateChangeReason int reason) { - if (mHelpBubble != null) mHelpBubble.dismiss(); + dismissHelpBubble(); Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile()); tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED); @@ -149,14 +152,23 @@ if (!fromMenu && !showRefreshIph && !showColdStartIph) return; // Determine which strings to use. + boolean showAtTopOfScreen = showRefreshIph + && ChromeFeatureList.isEnabled( + ChromeFeatureList.CHROME_HOME_PULL_TO_REFRESH_IPH_AT_TOP); boolean showExpandButtonHelpBubble = !showRefreshIph && mToolbar.isUsingExpandButton(); View anchorView = showExpandButtonHelpBubble ? mControlContainer.findViewById(R.id.expand_sheet_button) : mControlContainer; - int stringId = showRefreshIph ? R.string.bottom_sheet_pull_to_refresh_help_bubble_message - : showExpandButtonHelpBubble - ? R.string.bottom_sheet_accessibility_expand_button_help_bubble_message - : R.string.bottom_sheet_help_bubble_message; + int stringId = 0; + if (showRefreshIph) { + stringId = showAtTopOfScreen + ? R.string.bottom_sheet_pull_to_refresh_help_bubble_accessibility_message + : R.string.bottom_sheet_pull_to_refresh_help_bubble_message; + } else if (showExpandButtonHelpBubble) { + stringId = R.string.bottom_sheet_accessibility_expand_button_help_bubble_message; + } else { + stringId = R.string.bottom_sheet_help_bubble_message; + } int accessibilityStringId = showRefreshIph ? R.string.bottom_sheet_pull_to_refresh_help_bubble_accessibility_message : stringId; @@ -166,7 +178,7 @@ EmptyOverviewModeObserver overviewModeObserver = new EmptyOverviewModeObserver() { @Override public void onOverviewModeStartedShowing(boolean showToolbar) { - mHelpBubble.dismiss(); + dismissHelpBubble(); } }; mLayoutManager.addOverviewModeObserver(overviewModeObserver); @@ -176,8 +188,29 @@ mFullscreenManager.getBrowserVisibilityDelegate().showControlsPersistent(); // Create the help bubble and setup dismissal behavior. - mHelpBubble = - new ViewAnchoredTextBubble(mContext, anchorView, stringId, accessibilityStringId); + View topAnchorView = (View) mBottomSheet.getParent(); + OnLayoutChangeListener topAnchorLayoutChangeListener = new OnLayoutChangeListener() { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) { + if (left != oldLeft || right != oldRight || top != oldTop || bottom != oldBottom) { + dismissHelpBubble(); + } + } + }; + + if (showAtTopOfScreen) { + mHelpBubble = + new TextBubble(mContext, topAnchorView, stringId, accessibilityStringId, false); + mHelpBubble.setAnchorRect(getTopAnchorRect(topAnchorView)); + topAnchorView.addOnLayoutChangeListener(topAnchorLayoutChangeListener); + } else { + mHelpBubble = new ViewAnchoredTextBubble( + mContext, anchorView, stringId, accessibilityStringId); + int inset = mContext.getResources().getDimensionPixelSize( + R.dimen.bottom_sheet_help_bubble_inset); + ((ViewAnchoredTextBubble) mHelpBubble).setInsetPx(0, inset, 0, inset); + } if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_HOME_PERSISTENT_IPH)) { int dismissTimeout = ChromeFeatureList.getFieldTrialParamByFeatureAsInt( @@ -205,6 +238,10 @@ ViewHighlighter.turnOffHighlight(anchorView); + if (showAtTopOfScreen) { + topAnchorView.removeOnLayoutChangeListener(topAnchorLayoutChangeListener); + } + mHelpBubble = null; } }); @@ -215,9 +252,6 @@ } // Show the bubble. - int inset = mContext.getResources().getDimensionPixelSize( - R.dimen.bottom_sheet_help_bubble_inset); - mHelpBubble.setInsetPx(0, inset, 0, inset); mHelpBubble.show(); } @@ -225,7 +259,24 @@ * @return The bottom sheet's help bubble if it exists. */ @VisibleForTesting - public @Nullable ViewAnchoredTextBubble getHelpBubbleForTests() { + public @Nullable TextBubble getHelpBubbleForTests() { return mHelpBubble; } + + /** Dismiss the help bubble if it is not null. */ + private void dismissHelpBubble() { + if (mHelpBubble != null) mHelpBubble.dismiss(); + } + + /** + * @param topAnchorView The view used display the IPH bubble when it is shown at the top of the + * screen. + * @return A {@link Rect} used to anchor the IPH bubble. + */ + private Rect getTopAnchorRect(View topAnchorView) { + int[] locationInWindow = new int[2]; + topAnchorView.getLocationInWindow(locationInWindow); + int centerPoint = locationInWindow[0] + topAnchorView.getWidth() / 2; + return new Rect(centerPoint, locationInWindow[1], centerPoint, locationInWindow[1]); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/ArrowBubbleDrawable.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/ArrowBubbleDrawable.java index d36a8d05..97862b08 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/ArrowBubbleDrawable.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/ArrowBubbleDrawable.java
@@ -37,6 +37,7 @@ private int mArrowXOffsetPx; private boolean mArrowOnTop; + private boolean mShowArrow; public ArrowBubbleDrawable(Context context) { mRadiusPx = context.getResources().getDimensionPixelSize(R.dimen.text_bubble_corner_radius); @@ -103,6 +104,21 @@ } /** + * @return Whether or not an arrow is currently shown. + */ + public boolean isShowingArrow() { + return mShowArrow; + } + + /** + * @param showArrow Whether the bubble should have an arrow. + */ + public void setShowArrow(boolean showArrow) { + mShowArrow = showArrow; + invalidateSelf(); + } + + /** * @param color The color to make the bubble and arrow. */ public void setBubbleColor(@ColorInt int color) { @@ -132,16 +148,19 @@ public void draw(Canvas canvas) { mBubbleDrawable.draw(canvas); - canvas.save(); - // If the arrow is on the bottom, flip the arrow before drawing. - if (!mArrowOnTop) { - int arrowCenterYPx = getBounds().height() - mArrowHeightPx / 2; - canvas.scale(1, -1, mArrowXOffsetPx, arrowCenterYPx); - canvas.translate(0, arrowCenterYPx - mArrowHeightPx / 2); + if (mShowArrow) { + canvas.save(); + + // If the arrow is on the bottom, flip the arrow before drawing. + if (!mArrowOnTop) { + int arrowCenterYPx = getBounds().height() - mArrowHeightPx / 2; + canvas.scale(1, -1, mArrowXOffsetPx, arrowCenterYPx); + canvas.translate(0, arrowCenterYPx - mArrowHeightPx / 2); + } + canvas.translate(mArrowXOffsetPx, 0); + canvas.drawPath(mArrowPath, mArrowPaint); + canvas.restore(); } - canvas.translate(mArrowXOffsetPx, 0); - canvas.drawPath(mArrowPath, mArrowPaint); - canvas.restore(); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/TextBubble.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/TextBubble.java index e087f522..48f466328 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/TextBubble.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/textbubble/TextBubble.java
@@ -129,7 +129,7 @@ private final int mAccessibilityStringId; /** - * Constructs a {@link TextBubble} instance. + * Constructs a {@link TextBubble} instance using the default arrow drawable background. * @param context Context to draw resources from. * @param rootView The {@link View} to use for size calculations and for display. * @param stringId The id of the string resource for the text that should be shown. @@ -137,12 +137,28 @@ */ public TextBubble(Context context, View rootView, @StringRes int stringId, @StringRes int accessibilityStringId) { + this(context, rootView, stringId, accessibilityStringId, true); + } + + /** + * Constructs a {@link TextBubble} instance. + * @param context Context to draw resources from. + * @param rootView The {@link View} to use for size calculations and for display. + * @param stringId The id of the string resource for the text that should be shown. + * @param accessibilityStringId The id of the string resource of the accessibility text. + * @param showArrow Whether the bubble should have an arrow. + */ + public TextBubble(Context context, View rootView, @StringRes int stringId, + @StringRes int accessibilityStringId, boolean showArrow) { mContext = context; mRootView = rootView.getRootView(); mStringId = stringId; mAccessibilityStringId = accessibilityStringId; mPopupWindow = new PopupWindow(mContext); + mDrawable = new ArrowBubbleDrawable(context); + mDrawable.setShowArrow(showArrow); + mHandler = new Handler(); mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); @@ -355,14 +371,19 @@ // In landscape mode, root view includes the decorations in some devices. So we guard the // window dimensions against |mCachedWindowRect.right| instead. mX = MathUtils.clamp(mX, mMarginPx, mCachedWindowRect.right - mWidth - mMarginPx); - int arrowXOffset = mAnchorRect.centerX() - mX; - // Force the anchor to be in a reasonable spot w.r.t. the bubble (not over the corners). - int minArrowOffset = mDrawable.getArrowLeftSpacing(); - int maxArrowOffset = mWidth - mDrawable.getArrowRightSpacing(); - arrowXOffset = MathUtils.clamp(arrowXOffset, minArrowOffset, maxArrowOffset); + int arrowXOffset = 0; + if (mDrawable.isShowingArrow()) { + arrowXOffset = mAnchorRect.centerX() - mX; - // TODO(dtrainor): Figure out how to move the arrow and bubble to make things look better. + // Force the anchor to be in a reasonable spot w.r.t. the bubble (not over the corners). + int minArrowOffset = mDrawable.getArrowLeftSpacing(); + int maxArrowOffset = mWidth - mDrawable.getArrowRightSpacing(); + arrowXOffset = MathUtils.clamp(arrowXOffset, minArrowOffset, maxArrowOffset); + } + + // TODO(dtrainor): Figure out how to move the arrow and bubble to make things look + // better. mDrawable.setPositionProperties(arrowXOffset, positionBelow);
diff --git a/chrome/app/chrome_crash_reporter_client_win.cc b/chrome/app/chrome_crash_reporter_client_win.cc index 0b12ebf..27e3a65 100644 --- a/chrome/app/chrome_crash_reporter_client_win.cc +++ b/chrome/app/chrome_crash_reporter_client_win.cc
@@ -83,10 +83,6 @@ {kShutdownType, kSmallSize}, {kBrowserUnpinTrace, kMediumSize}, - // content/: - {"discardable-memory-allocated", kSmallSize}, - {"discardable-memory-free", kSmallSize}, - {"total-discardable-memory-allocated", kSmallSize}, {kViewCount, kSmallSize}, // media/:
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 8b9d59d..a8424ac 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1025,6 +1025,8 @@ "policy/managed_bookmarks_policy_handler.h", "policy/network_prediction_policy_handler.cc", "policy/network_prediction_policy_handler.h", + "policy/policy_conversions.cc", + "policy/policy_conversions.h", "policy/policy_helpers.cc", "policy/policy_helpers.h", "policy/profile_policy_connector.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index ed61bc6..d614fe62 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1907,6 +1907,10 @@ flag_descriptions::kChromeHomePersistentIphName, flag_descriptions::kChromeHomePersistentIphDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kChromeHomePersistentIph)}, + {"enable-chrome-home-pull-to-refresh-iph-at-top", + flag_descriptions::kChromeHomePullToRefreshIphAtTopName, + flag_descriptions::kChromeHomePullToRefreshIphAtTopDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kChromeHomePullToRefreshIphAtTop)}, {"enable-chrome-memex", flag_descriptions::kChromeMemexName, flag_descriptions::kChromeMemexDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kChromeMemexFeature)},
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc index 7f0dd14..7ca2304 100644 --- a/chrome/browser/android/chrome_feature_list.cc +++ b/chrome/browser/android/chrome_feature_list.cc
@@ -73,6 +73,7 @@ &kChromeHomePromo, &kChromeHomePromoInfoOnly, &kChromeHomePromoOnStartup, + &kChromeHomePullToRefreshIphAtTop, &kChromeHomeOptOutSnackbar, &kChromeHomeShowGoogleGWhenUrlCleared, &kChromeHomeSurvey, @@ -213,6 +214,9 @@ const base::Feature kChromeHomePromoOnStartup{"ChromeHomePromoOnStartup", base::FEATURE_ENABLED_BY_DEFAULT}; +const base::Feature kChromeHomePullToRefreshIphAtTop{ + "ChromeHomePullToRefreshIphAtTop", base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kChromeHomeOptOutSnackbar{ "ChromeHomeOptOutSnackbar", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h index 1b09a01..22dc1ce 100644 --- a/chrome/browser/android/chrome_feature_list.h +++ b/chrome/browser/android/chrome_feature_list.h
@@ -32,6 +32,7 @@ extern const base::Feature kChromeHomePromo; extern const base::Feature kChromeHomePromoInfoOnly; extern const base::Feature kChromeHomePromoOnStartup; +extern const base::Feature kChromeHomePullToRefreshIphAtTop; extern const base::Feature kChromeHomeOptOutSnackbar; extern const base::Feature kChromeHomeShowGoogleGWhenUrlCleared; extern const base::Feature kChromeHomeSurvey;
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc index 113b5c2..24e9162 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -397,7 +397,7 @@ // Fails on ASAN. See http://crbug.com/776308 . (Note MAYBE_ doesn't work well // with parameterized tests). -#if !defined(ADDRESS_SANITIZER) +#if !defined(ADDRESS_SANITIZER) && !defined(OS_CHROMEOS) IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, NavigateSystemTray) { EnableChromeVox(); @@ -456,7 +456,7 @@ break; } } -#endif // !defined(ADDRESS_SANITIZER) +#endif // !defined(ADDRESS_SANITIZER) && !defined(OS_CHROMEOS) // See http://crbug.com/443608 IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, DISABLED_ScreenBrightness) {
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.cc b/chrome/browser/chromeos/arc/arc_service_launcher.cc index b0bfec2..b18e4139 100644 --- a/chrome/browser/chromeos/arc/arc_service_launcher.cc +++ b/chrome/browser/chromeos/arc/arc_service_launcher.cc
@@ -55,6 +55,7 @@ #include "components/arc/power/arc_power_bridge.h" #include "components/arc/rotation_lock/arc_rotation_lock_bridge.h" #include "components/arc/storage_manager/arc_storage_manager.h" +#include "components/arc/usb/usb_host_bridge.h" #include "components/arc/volume_mounter/arc_volume_mounter_bridge.h" #include "components/prefs/pref_member.h" #include "ui/arc/notification/arc_notification_manager.h" @@ -163,6 +164,7 @@ ArcSettingsService::GetForBrowserContext(profile); ArcTracingBridge::GetForBrowserContext(profile); ArcTtsService::GetForBrowserContext(profile); + ArcUsbHostBridge::GetForBrowserContext(profile); ArcUserSessionService::GetForBrowserContext(profile); ArcVoiceInteractionArcHomeService::GetForBrowserContext(profile); ArcVoiceInteractionFrameworkService::GetForBrowserContext(profile);
diff --git a/chrome/browser/chromeos/policy/system_log_uploader.cc b/chrome/browser/chromeos/policy/system_log_uploader.cc index a8fce4d..5574cd7 100644 --- a/chrome/browser/chromeos/policy/system_log_uploader.cc +++ b/chrome/browser/chromeos/policy/system_log_uploader.cc
@@ -21,9 +21,12 @@ #include "chrome/browser/chromeos/policy/upload_job_impl.h" #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h" +#include "chrome/browser/policy/policy_conversions.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/chrome_switches.h" #include "components/feedback/anonymizer_tool.h" #include "components/policy/core/browser/browser_policy_connector.h" +#include "components/user_manager/user_manager.h" #include "net/http/http_request_headers.h" namespace policy { @@ -39,6 +42,10 @@ // The cutoff point (in bytes) after which log contents are ignored. const size_t kLogCutoffSize = 50 * 1024 * 1024; // 50 MiB. +// Pseudo-location of policy dump file. Policy is uploaded from memory, +// there is no actual file on disk. +constexpr char kPolicyDumpFileLocation[] = "/var/log/policy_dump.json"; + // The file names of the system logs to upload. // Note: do not add anything to this list without checking for PII in the file. const char* const kSystemLogFileNames[] = { @@ -91,7 +98,8 @@ ~SystemLogDelegate() override; // SystemLogUploader::Delegate: - void LoadSystemLogs(const LogUploadCallback& upload_callback) override; + std::string GetPolicyAsJSON() override; + void LoadSystemLogs(LogUploadCallback upload_callback) override; std::unique_ptr<UploadJob> CreateUploadJob( const GURL& upload_url, @@ -110,13 +118,24 @@ SystemLogDelegate::~SystemLogDelegate() {} -void SystemLogDelegate::LoadSystemLogs( - const LogUploadCallback& upload_callback) { +std::string SystemLogDelegate::GetPolicyAsJSON() { + bool include_user_policies = false; + if (user_manager::UserManager::IsInitialized()) { + if (user_manager::UserManager::Get()->GetPrimaryUser()) { + include_user_policies = + user_manager::UserManager::Get()->GetPrimaryUser()->IsAffiliated(); + } + } + return policy::GetAllPolicyValuesAsJSON( + ProfileManager::GetActiveUserProfile(), include_user_policies); +} + +void SystemLogDelegate::LoadSystemLogs(LogUploadCallback upload_callback) { // Run ReadFiles() in the thread that interacts with the file system and // return system logs to |upload_callback| on the current thread. base::PostTaskWithTraitsAndReplyWithResult( FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, - base::Bind(&ReadFiles), upload_callback); + base::BindOnce(&ReadFiles), std::move(upload_callback)); } std::unique_ptr<UploadJob> SystemLogDelegate::CreateUploadJob( @@ -311,10 +330,10 @@ DCHECK(thread_checker_.CalledOnValidThread()); if (upload_enabled_) { - SYSLOG(INFO) << "Starting system log upload."; + SYSLOG(INFO) << "Reading system logs for upload."; log_upload_in_progress_ = true; - syslog_delegate_->LoadSystemLogs(base::Bind( - &SystemLogUploader::UploadSystemLogs, weak_factory_.GetWeakPtr())); + syslog_delegate_->LoadSystemLogs(base::BindOnce( + &SystemLogUploader::OnSystemLogsLoaded, weak_factory_.GetWeakPtr())); } else { // If upload is disabled, schedule the next attempt after 12h. SYSLOG(INFO) << "System log upload is disabled, rescheduling."; @@ -324,6 +343,16 @@ } } +void SystemLogUploader::OnSystemLogsLoaded( + std::unique_ptr<SystemLogs> system_logs) { + // Must be called on the main thread. + DCHECK(thread_checker_.CalledOnValidThread()); + system_logs->push_back(std::make_pair(kPolicyDumpFileLocation, + syslog_delegate_->GetPolicyAsJSON())); + SYSLOG(INFO) << "Starting system log upload."; + UploadSystemLogs(std::move(system_logs)); +} + void SystemLogUploader::ScheduleNextSystemLogUpload(base::TimeDelta frequency) { // Don't schedule a new system log upload if there's a log upload in progress // (it will be scheduled once the current one completes).
diff --git a/chrome/browser/chromeos/policy/system_log_uploader.h b/chrome/browser/chromeos/policy/system_log_uploader.h index 608df1a..c1be946 100644 --- a/chrome/browser/chromeos/policy/system_log_uploader.h +++ b/chrome/browser/chromeos/policy/system_log_uploader.h
@@ -59,12 +59,15 @@ class Delegate { public: using LogUploadCallback = - base::Callback<void(std::unique_ptr<SystemLogs> system_logs)>; + base::OnceCallback<void(std::unique_ptr<SystemLogs> system_logs)>; virtual ~Delegate() {} + // Returns current policy dump in JSON format. + virtual std::string GetPolicyAsJSON() = 0; + // Loads system logs and invokes |upload_callback|. - virtual void LoadSystemLogs(const LogUploadCallback& upload_callback) = 0; + virtual void LoadSystemLogs(LogUploadCallback upload_callback) = 0; // Creates a new fully configured instance of an UploadJob. This method // will be called exactly once per every system log upload. @@ -101,7 +104,10 @@ void StartLogUpload(); // The callback is invoked by the Delegate if system logs have been loaded - // from disk, uploads system logs. + // from disk, adds policy dump and calls UploadSystemLogs. + void OnSystemLogsLoaded(std::unique_ptr<SystemLogs> system_logs); + + // Uploads system logs. void UploadSystemLogs(std::unique_ptr<SystemLogs> system_logs); // Helper method that figures out when the next system log upload should
diff --git a/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc b/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc index 8cbf76e..87c2811 100644 --- a/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc +++ b/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc
@@ -21,6 +21,10 @@ namespace { +// Pseudo-location of policy dump file. +constexpr char kPolicyDumpFileLocation[] = "/var/log/policy_dump.json"; +constexpr char kPolicyDump[] = "{}"; + // The list of tested system log file names. const char* const kTestSystemLogFileNames[] = {"name1.txt", "name32.txt"}; @@ -81,7 +85,11 @@ file_index_ + 1), name); - EXPECT_EQ(kTestSystemLogFileNames[file_index_], filename); + if (file_index_ == max_files_ - 1) { + EXPECT_EQ(kPolicyDumpFileLocation, filename); + } else { + EXPECT_EQ(kTestSystemLogFileNames[file_index_], filename); + } EXPECT_EQ(2U, header_entries.size()); EXPECT_EQ( @@ -90,7 +98,11 @@ EXPECT_EQ(SystemLogUploader::kContentTypePlainText, header_entries.find(net::HttpRequestHeaders::kContentType)->second); - EXPECT_EQ(kTestSystemLogFileNames[file_index_], *data); + if (file_index_ == max_files_ - 1) { + EXPECT_EQ(kPolicyDump, *data); + } else { + EXPECT_EQ(kTestSystemLogFileNames[file_index_], *data); + } file_index_++; } @@ -117,9 +129,11 @@ : is_upload_error_(is_upload_error), system_logs_(system_logs) {} ~MockSystemLogDelegate() override {} - void LoadSystemLogs(const LogUploadCallback& upload_callback) override { + std::string GetPolicyAsJSON() override { return kPolicyDump; } + + void LoadSystemLogs(LogUploadCallback upload_callback) override { EXPECT_TRUE(is_upload_allowed_); - upload_callback.Run( + std::move(upload_callback).Run( base::MakeUnique<SystemLogUploader::SystemLogs>(system_logs_)); } @@ -127,7 +141,7 @@ const GURL& url, UploadJob::Delegate* delegate) override { return base::MakeUnique<MockUploadJob>(url, delegate, is_upload_error_, - system_logs_.size()); + system_logs_.size() + 1); } void set_upload_allowed(bool is_upload_allowed) {
diff --git a/chrome/browser/devtools/device/usb/android_usb_socket.h b/chrome/browser/devtools/device/usb/android_usb_socket.h index 17715b1..799c1e8 100644 --- a/chrome/browser/devtools/device/usb/android_usb_socket.h +++ b/chrome/browser/devtools/device/usb/android_usb_socket.h
@@ -35,12 +35,11 @@ int Read(net::IOBuffer* buf, int buf_len, const net::CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. - int Write(net::IOBuffer* buf, - int buf_len, - const net::CompletionCallback& callback, - const net::NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + int Write( + net::IOBuffer* buf, + int buf_len, + const net::CompletionCallback& callback, + const net::NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int Connect(const net::CompletionCallback& callback) override;
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index f157acf..60f212ac 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1715,6 +1715,11 @@ const char kChromeHomePromoDescription[] = "Enable showing the opt-in/out Chrome Home promo."; +const char kChromeHomePullToRefreshIphAtTopName[] = + "Chrome Home Pull-To-Refresh Iph At Top"; +const char kChromeHomePullToRefreshIphAtTopDescription[] = + "Show the Chrome Home pull-to-refresh help bubble at the top of the screen"; + const char kChromeHomeShowGoogleGName[] = "Chrome Home Show Google G"; const char kChromeHomeShowGoogleGDescription[] = "Show the Google G when the url is cleared. The flag to clear the url "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index ba5f3f6..ac0eb294 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1052,6 +1052,9 @@ extern const char kChromeHomePromoName[]; extern const char kChromeHomePromoDescription[]; +extern const char kChromeHomePullToRefreshIphAtTopName[]; +extern const char kChromeHomePullToRefreshIphAtTopDescription[]; + extern const char kChromeHomeShowGoogleGName[]; extern const char kChromeHomeShowGoogleGDescription[];
diff --git a/chrome/browser/policy/policy_conversions.cc b/chrome/browser/policy/policy_conversions.cc new file mode 100644 index 0000000..bf6952c3 --- /dev/null +++ b/chrome/browser/policy/policy_conversions.cc
@@ -0,0 +1,188 @@ +// 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/policy/policy_conversions.h" + +#include "base/json/json_writer.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/policy/profile_policy_connector.h" +#include "chrome/browser/policy/profile_policy_connector_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "components/policy/core/browser/browser_policy_connector.h" +#include "components/policy/core/browser/policy_error_map.h" +#include "components/policy/core/common/policy_details.h" +#include "components/policy/core/common/policy_namespace.h" +#include "components/policy/core/common/policy_service.h" +#include "components/policy/core/common/policy_types.h" +#include "components/policy/policy_constants.h" +#include "components/strings/grit/components_strings.h" +#include "extensions/features/features.h" + +#if BUILDFLAG(ENABLE_EXTENSIONS) +#include "extensions/browser/extension_registry.h" +#include "extensions/common/extension.h" +#include "extensions/common/manifest.h" +#include "extensions/common/manifest_constants.h" +#endif + +namespace policy { + +namespace { + +struct PolicyStringMap { + const char* key; + int string_id; +}; + +const PolicyStringMap kPolicySources[policy::POLICY_SOURCE_COUNT] = { + {"sourceEnterpriseDefault", IDS_POLICY_SOURCE_ENTERPRISE_DEFAULT}, + {"sourceCloud", IDS_POLICY_SOURCE_CLOUD}, + {"sourceActiveDirectory", IDS_POLICY_SOURCE_ACTIVE_DIRECTORY}, + {"sourcePublicSessionOverride", IDS_POLICY_SOURCE_PUBLIC_SESSION_OVERRIDE}, + {"sourcePlatform", IDS_POLICY_SOURCE_PLATFORM}, +}; + +// Utility function that returns a JSON serialization of the given |dict|. +std::unique_ptr<base::Value> DictionaryToJSONString( + const base::DictionaryValue& dict) { + std::string json_string; + base::JSONWriter::WriteWithOptions( + dict, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json_string); + return std::make_unique<base::Value>(json_string); +} + +// Returns a copy of |value|. If necessary (which is specified by +// |convert_values|), converts some values to a representation that +// i18n_template.js will display. +std::unique_ptr<base::Value> CopyAndMaybeConvert(const base::Value* value, + bool convert_values) { + if (!convert_values) + return value->CreateDeepCopy(); + const base::DictionaryValue* dict = NULL; + if (value->GetAsDictionary(&dict)) + return DictionaryToJSONString(*dict); + + std::unique_ptr<base::Value> copy = value->CreateDeepCopy(); + base::ListValue* list = NULL; + if (copy->GetAsList(&list)) { + for (size_t i = 0; i < list->GetSize(); ++i) { + if (list->GetDictionary(i, &dict)) + list->Set(i, DictionaryToJSONString(*dict)); + } + } + + return copy; +} + +PolicyService* GetPolicyService(content::BrowserContext* context) { + return ProfilePolicyConnectorFactory::GetForBrowserContext(context) + ->policy_service(); +} + +// Inserts a description of each policy in |policy_map| into |values|, using +// the optional errors in |errors| to determine the status of each policy. If +// |convert_values| is true, converts the values to show them in javascript. + +void GetPolicyValues(const policy::PolicyMap& map, + policy::PolicyErrorMap* errors, + base::DictionaryValue* values, + bool with_user_policies, + bool convert_values) { + for (const auto& entry : map) { + if (entry.second.scope == policy::POLICY_SCOPE_USER && !with_user_policies) + continue; + std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue); + value->Set("value", + CopyAndMaybeConvert(entry.second.value.get(), convert_values)); + if (entry.second.scope == policy::POLICY_SCOPE_USER) + value->SetString("scope", "user"); + else + value->SetString("scope", "machine"); + if (entry.second.level == policy::POLICY_LEVEL_RECOMMENDED) + value->SetString("level", "recommended"); + else + value->SetString("level", "mandatory"); + value->SetString("source", kPolicySources[entry.second.source].key); + base::string16 error = errors->GetErrors(entry.first); + if (!error.empty()) + value->SetString("error", error); + values->SetWithoutPathExpansion(entry.first, std::move(value)); + } +} + +void GetChromePolicyValues(content::BrowserContext* context, + base::DictionaryValue* values, + bool keep_user_policies, + bool convert_values) { + policy::PolicyService* policy_service = GetPolicyService(context); + policy::PolicyMap map; + + // Make a copy that can be modified, since some policy values are modified + // before being displayed. + map.CopyFrom(policy_service->GetPolicies( + policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string()))); + + // Get a list of all the errors in the policy values. + const policy::ConfigurationPolicyHandlerList* handler_list = + g_browser_process->browser_policy_connector()->GetHandlerList(); + policy::PolicyErrorMap errors; + handler_list->ApplyPolicySettings(map, NULL, &errors); + + // Convert dictionary values to strings for display. + handler_list->PrepareForDisplaying(&map); + + GetPolicyValues(map, &errors, values, keep_user_policies, convert_values); +} + +} // namespace + +std::unique_ptr<base::DictionaryValue> GetAllPolicyValuesAsDictionary( + content::BrowserContext* context, + bool with_user_policies, + bool convert_values) { + base::DictionaryValue all_policies; + if (!context) + return std::make_unique<base::DictionaryValue>(std::move(all_policies)); + + // Add Chrome policy values. + auto chrome_policies = std::make_unique<base::DictionaryValue>(); + GetChromePolicyValues(context, chrome_policies.get(), with_user_policies, + convert_values); + all_policies.Set("chromePolicies", std::move(chrome_policies)); + +#if BUILDFLAG(ENABLE_EXTENSIONS) + // Add extension policy values. + extensions::ExtensionRegistry* registry = + extensions::ExtensionRegistry::Get(Profile::FromBrowserContext(context)); + auto extension_values = std::make_unique<base::DictionaryValue>(); + + for (const scoped_refptr<const extensions::Extension>& extension : + registry->enabled_extensions()) { + // Skip this extension if it's not an enterprise extension. + if (!extension->manifest()->HasPath( + extensions::manifest_keys::kStorageManagedSchema)) + continue; + auto extension_policies = std::make_unique<base::DictionaryValue>(); + policy::PolicyNamespace policy_namespace = policy::PolicyNamespace( + policy::POLICY_DOMAIN_EXTENSIONS, extension->id()); + policy::PolicyErrorMap empty_error_map; + GetPolicyValues(GetPolicyService(context)->GetPolicies(policy_namespace), + &empty_error_map, extension_policies.get(), + with_user_policies, convert_values); + extension_values->Set(extension->id(), std::move(extension_policies)); + } + all_policies.Set("extensionPolicies", std::move(extension_values)); +#endif + return std::make_unique<base::DictionaryValue>(std::move(all_policies)); +} + +std::string GetAllPolicyValuesAsJSON(content::BrowserContext* context, + bool with_user_policies) { + std::unique_ptr<base::DictionaryValue> all_policies = + policy::GetAllPolicyValuesAsDictionary(context, with_user_policies, + false /* convert_values */); + return DictionaryToJSONString(*all_policies)->GetString(); +} + +} // namespace policy
diff --git a/chrome/browser/policy/policy_conversions.h b/chrome/browser/policy/policy_conversions.h new file mode 100644 index 0000000..cf6295a5 --- /dev/null +++ b/chrome/browser/policy/policy_conversions.h
@@ -0,0 +1,32 @@ +// Copyright 2013 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_POLICY_POLICY_CONVERSIONS_H_ +#define CHROME_BROWSER_POLICY_POLICY_CONVERSIONS_H_ + +#include <memory> + +#include "base/values.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace policy { +// Returns a dictionary with the values of all set policies, with some values +// converted to be shown in javascript, if it is specified. +// |with_user_policies| governs if values with POLICY_SCOPE_USER are included. +std::unique_ptr<base::DictionaryValue> GetAllPolicyValuesAsDictionary( + content::BrowserContext* context, + bool with_user_policies, + bool convert_values); + +// Returns a JSON with the values of all set policies. +// |with_user_policies| governs if values with POLICY_SCOPE_USER are included. +std::string GetAllPolicyValuesAsJSON(content::BrowserContext* context, + bool with_user_policies); + +} // namespace policy + +#endif // CHROME_BROWSER_POLICY_POLICY_CONVERSIONS_H_
diff --git a/chrome/browser/process_singleton_mac.mm b/chrome/browser/process_singleton_mac.mm index 845ac41..7dfc5480 100644 --- a/chrome/browser/process_singleton_mac.mm +++ b/chrome/browser/process_singleton_mac.mm
@@ -11,30 +11,38 @@ namespace { -// Forwards |event| to an already-running Chromium process. +// Extracts the URL from |event| and forwards it to an already-running Chromium +// process. OSErr HandleGURLEvent(const AppleEvent* event, AppleEvent* reply, SRefCon handler_refcon) { - // Forwarding the message without |kAENoReply| hangs us, so assume that a - // reply is unnecessary as an invariant. - DCHECK_EQ(reply->descriptorType, typeNull); - pid_t forwarding_pid = *(reinterpret_cast<pid_t*>(handler_refcon)); base::mac::ScopedAEDesc<> other_process_pid; // Create an address descriptor for the running process. AECreateDesc(typeKernelProcessID, &forwarding_pid, sizeof(forwarding_pid), other_process_pid.OutPointer()); - // Change the event's address to the running process. - AppleEvent* event_copy = const_cast<AppleEvent*>(event); - if (AEPutAttributeDesc(event_copy, keyAddressAttr, other_process_pid) == - noErr) { - // Send the message back out. - AESendMessage(event_copy, reply, kAENoReply, kNoTimeOut); - return noErr; - } + OSErr status = noErr; + base::mac::ScopedAEDesc<> event_copy; + status = AECreateAppleEvent(kInternetEventClass, kAEGetURL, other_process_pid, + kAutoGenerateReturnID, kAnyTransactionID, + event_copy.OutPointer()); + if (status != noErr) + return status; - return noErr; + base::mac::ScopedAEDesc<> url; + // A GURL event's direct object is the URL as a descriptor with type + // TEXT. + status = + AEGetParamDesc(event, keyDirectObject, typeWildCard, url.OutPointer()); + if (status != noErr) + return status; + + status = AEPutParamDesc(event_copy.OutPointer(), keyDirectObject, url); + if (status != noErr) + return status; + + return AESendMessage(event_copy, reply, kAENoReply, kNoTimeOut); } } // namespace
diff --git a/chrome/browser/ui/webui/policy_ui_handler.cc b/chrome/browser/ui/webui/policy_ui_handler.cc index d834c87..ccfafe79 100644 --- a/chrome/browser/ui/webui/policy_ui_handler.cc +++ b/chrome/browser/ui/webui/policy_ui_handler.cc
@@ -26,6 +26,7 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/download/download_prefs.h" +#include "chrome/browser/policy/policy_conversions.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/policy/profile_policy_connector_factory.h" #include "chrome/browser/policy/schema_registry_service.h" @@ -176,39 +177,6 @@ dict->SetString("domain", gaia::ExtractDomainName(username)); } -// Utility function that returns a JSON serialization of the given |dict|. -std::unique_ptr<base::Value> DictionaryToJSONString( - const base::DictionaryValue& dict) { - std::string json_string; - base::JSONWriter::WriteWithOptions(dict, - base::JSONWriter::OPTIONS_PRETTY_PRINT, - &json_string); - return std::make_unique<base::Value>(json_string); -} - -// Returns a copy of |value|. If necessary (which is specified by -// |convert_values|), converts some values to a representation that -// i18n_template.js will display. -std::unique_ptr<base::Value> CopyAndMaybeConvert(const base::Value* value, - bool convert_values) { - if (!convert_values) - return value->CreateDeepCopy(); - const base::DictionaryValue* dict = NULL; - if (value->GetAsDictionary(&dict)) - return DictionaryToJSONString(*dict); - - std::unique_ptr<base::Value> copy = value->CreateDeepCopy(); - base::ListValue* list = NULL; - if (copy->GetAsList(&list)) { - for (size_t i = 0; i < list->GetSize(); ++i) { - if (list->GetDictionary(i, &dict)) - list->Set(i, DictionaryToJSONString(*dict)); - } - } - - return copy; -} - } // namespace // An interface for querying the status of a policy provider. It surfaces @@ -765,93 +733,15 @@ web_ui()->CallJavascriptFunctionUnsafe("policy.Page.setPolicyNames", names); } -std::unique_ptr<base::DictionaryValue> PolicyUIHandler::GetAllPolicyValues( - bool convert_values) const { - base::DictionaryValue all_policies; - - // Add Chrome policy values. - auto chrome_policies = std::make_unique<base::DictionaryValue>(); - GetChromePolicyValues(chrome_policies.get(), convert_values); - all_policies.Set("chromePolicies", std::move(chrome_policies)); - -#if BUILDFLAG(ENABLE_EXTENSIONS) - // Add extension policy values. - extensions::ExtensionRegistry* registry = - extensions::ExtensionRegistry::Get(Profile::FromWebUI(web_ui())); - auto extension_values = std::make_unique<base::DictionaryValue>(); - - for (const scoped_refptr<const extensions::Extension>& extension : - registry->enabled_extensions()) { - // Skip this extension if it's not an enterprise extension. - if (!extension->manifest()->HasPath( - extensions::manifest_keys::kStorageManagedSchema)) - continue; - auto extension_policies = std::make_unique<base::DictionaryValue>(); - policy::PolicyNamespace policy_namespace = policy::PolicyNamespace( - policy::POLICY_DOMAIN_EXTENSIONS, extension->id()); - policy::PolicyErrorMap empty_error_map; - GetPolicyValues(GetPolicyService()->GetPolicies(policy_namespace), - &empty_error_map, extension_policies.get(), convert_values); - extension_values->Set(extension->id(), std::move(extension_policies)); - } - all_policies.Set("extensionPolicies", std::move(extension_values)); -#endif - return std::make_unique<base::DictionaryValue>(std::move(all_policies)); -} - void PolicyUIHandler::SendPolicyValues() const { std::unique_ptr<base::DictionaryValue> all_policies = - GetAllPolicyValues(true); + policy::GetAllPolicyValuesAsDictionary( + web_ui()->GetWebContents()->GetBrowserContext(), + true /* with_user_policies */, true /* convert_values */); web_ui()->CallJavascriptFunctionUnsafe("policy.Page.setPolicyValues", *all_policies); } -void PolicyUIHandler::GetPolicyValues(const policy::PolicyMap& map, - policy::PolicyErrorMap* errors, - base::DictionaryValue* values, - bool convert_values) const { - for (const auto& entry : map) { - std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue); - value->Set("value", - CopyAndMaybeConvert(entry.second.value.get(), convert_values)); - if (entry.second.scope == policy::POLICY_SCOPE_USER) - value->SetString("scope", "user"); - else - value->SetString("scope", "machine"); - if (entry.second.level == policy::POLICY_LEVEL_RECOMMENDED) - value->SetString("level", "recommended"); - else - value->SetString("level", "mandatory"); - value->SetString("source", kPolicySources[entry.second.source].key); - base::string16 error = errors->GetErrors(entry.first); - if (!error.empty()) - value->SetString("error", error); - values->SetWithoutPathExpansion(entry.first, std::move(value)); - } -} - -void PolicyUIHandler::GetChromePolicyValues(base::DictionaryValue* values, - bool convert_values) const { - policy::PolicyService* policy_service = GetPolicyService(); - policy::PolicyMap map; - - // Make a copy that can be modified, since some policy values are modified - // before being displayed. - map.CopyFrom(policy_service->GetPolicies( - policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string()))); - - // Get a list of all the errors in the policy values. - const policy::ConfigurationPolicyHandlerList* handler_list = - g_browser_process->browser_policy_connector()->GetHandlerList(); - policy::PolicyErrorMap errors; - handler_list->ApplyPolicySettings(map, NULL, &errors); - - // Convert dictionary values to strings for display. - handler_list->PrepareForDisplaying(&map); - - GetPolicyValues(map, &errors, values, convert_values); -} - void PolicyUIHandler::SendStatus() const { std::unique_ptr<base::DictionaryValue> device_status( new base::DictionaryValue); @@ -909,10 +799,9 @@ void PolicyUIHandler::WritePoliciesToJSONFile( const base::FilePath& path) const { - std::unique_ptr<base::DictionaryValue> all_policies = - GetAllPolicyValues(false); - std::string json_policies = - DictionaryToJSONString(*all_policies)->GetString(); + std::string json_policies = policy::GetAllPolicyValuesAsJSON( + web_ui()->GetWebContents()->GetBrowserContext(), + true /* with_user_policies */); base::PostTaskWithTraits( FROM_HERE,
diff --git a/chrome/browser/ui/webui/policy_ui_handler.h b/chrome/browser/ui/webui/policy_ui_handler.h index e181e422..a3f7e8c 100644 --- a/chrome/browser/ui/webui/policy_ui_handler.h +++ b/chrome/browser/ui/webui/policy_ui_handler.h
@@ -98,22 +98,6 @@ // information is sent. void SendStatus() const; - // Inserts a description of each policy in |policy_map| into |values|, using - // the optional errors in |errors| to determine the status of each policy. If - // |convert_values| is true, converts the values to show them in javascript. - void GetPolicyValues(const policy::PolicyMap& policy_map, - policy::PolicyErrorMap* errors, - base::DictionaryValue* values, - bool convert_values) const; - - // Returns a dictionary with the values of all set policies, with some values - // converted to be shown in javascript, if it is specified. - std::unique_ptr<base::DictionaryValue> GetAllPolicyValues( - bool convert_values) const; - - void GetChromePolicyValues(base::DictionaryValue* values, - bool convert_values) const; - void WritePoliciesToJSONFile(const base::FilePath& path) const; void HandleInitialized(const base::ListValue* args);
diff --git a/chrome/common/crash_keys.cc b/chrome/common/crash_keys.cc index 0e26e9e..e0c5c746 100644 --- a/chrome/common/crash_keys.cc +++ b/chrome/common/crash_keys.cc
@@ -63,10 +63,6 @@ {kShutdownType, kSmallSize}, {kBrowserUnpinTrace, kMediumSize}, - // content/: - {"discardable-memory-allocated", kSmallSize}, - {"discardable-memory-free", kSmallSize}, - {"total-discardable-memory-allocated", kSmallSize}, {kViewCount, kSmallSize}, // sandbox/:
diff --git a/chrome/renderer/net/OWNERS b/chrome/renderer/net/OWNERS index 5ca5854..64d7be95 100644 --- a/chrome/renderer/net/OWNERS +++ b/chrome/renderer/net/OWNERS
@@ -1,4 +1,3 @@ -jar@chromium.org mmenke@chromium.org juliatuttle@chromium.org
diff --git a/chrome/test/chromedriver/net/adb_client_socket.cc b/chrome/test/chromedriver/net/adb_client_socket.cc index 448378f..68e8dae 100644 --- a/chrome/test/chromedriver/net/adb_client_socket.cc +++ b/chrome/test/chromedriver/net/adb_client_socket.cc
@@ -18,6 +18,7 @@ #include "net/base/net_errors.h" #include "net/log/net_log_source.h" #include "net/socket/tcp_client_socket.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "third_party/WebKit/public/public_features.h" namespace { @@ -150,9 +151,9 @@ new net::StringIOBuffer(request_); result = socket_->Write( - request_buffer.get(), - request_buffer->size(), - base::Bind(&HttpOverAdbSocket::ReadResponse, base::Unretained(this))); + request_buffer.get(), request_buffer->size(), + base::Bind(&HttpOverAdbSocket::ReadResponse, base::Unretained(this)), + TRAFFIC_ANNOTATION_FOR_TESTS); if (result != net::ERR_IO_PENDING) ReadResponse(result); } @@ -408,8 +409,8 @@ scoped_refptr<net::StringIOBuffer> request_buffer = new net::StringIOBuffer(buffer); - int result = - socket_->Write(request_buffer.get(), request_buffer->size(), callback); + int result = socket_->Write(request_buffer.get(), request_buffer->size(), + callback, TRAFFIC_ANNOTATION_FOR_TESTS); if (result != net::ERR_IO_PENDING) callback.Run(result); } @@ -527,13 +528,11 @@ const CommandCallback& callback) { scoped_refptr<net::StringIOBuffer> request_buffer = new net::StringIOBuffer(EncodeMessage(command)); - int result = socket_->Write(request_buffer.get(), - request_buffer->size(), - base::Bind(&AdbClientSocket::ReadResponse, - base::Unretained(this), - callback, - is_void, - has_length)); + int result = socket_->Write( + request_buffer.get(), request_buffer->size(), + base::Bind(&AdbClientSocket::ReadResponse, base::Unretained(this), + callback, is_void, has_length), + TRAFFIC_ANNOTATION_FOR_TESTS); if (result != net::ERR_IO_PENDING) ReadResponse(callback, is_void, has_length, result); }
diff --git a/chromecast/crash/cast_crash_keys.cc b/chromecast/crash/cast_crash_keys.cc index d855a041..e253489 100644 --- a/chromecast/crash/cast_crash_keys.cc +++ b/chromecast/crash/cast_crash_keys.cc
@@ -32,10 +32,6 @@ {"shutdown-type", ::crash_keys::kSmallSize}, {"browser-unpin-trace", ::crash_keys::kMediumSize}, - // content/: - {"discardable-memory-allocated", ::crash_keys::kSmallSize}, - {"discardable-memory-free", ::crash_keys::kSmallSize}, - {"total-discardable-memory-allocated", ::crash_keys::kSmallSize}, {"view-count", ::crash_keys::kSmallSize}, // media/:
diff --git a/chromecast/net/BUILD.gn b/chromecast/net/BUILD.gn index f6c3ae0f..313e313 100644 --- a/chromecast/net/BUILD.gn +++ b/chromecast/net/BUILD.gn
@@ -67,6 +67,7 @@ "//base", "//base/test:run_all_unittests", "//net", + "//net:test_support", "//testing/gtest", ] }
diff --git a/chromecast/net/fake_stream_socket.h b/chromecast/net/fake_stream_socket.h index 658d916..496496a 100644 --- a/chromecast/net/fake_stream_socket.h +++ b/chromecast/net/fake_stream_socket.h
@@ -31,12 +31,11 @@ int Read(net::IOBuffer* buf, int buf_len, const net::CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. - int Write(net::IOBuffer* buf, - int buf_len, - const net::CompletionCallback& callback, - const net::NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + int Write( + net::IOBuffer* buf, + int buf_len, + const net::CompletionCallback& callback, + const net::NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int Connect(const net::CompletionCallback& callback) override;
diff --git a/chromecast/net/fake_stream_socket_unittest.cc b/chromecast/net/fake_stream_socket_unittest.cc index 77ed216..10357f1 100644 --- a/chromecast/net/fake_stream_socket_unittest.cc +++ b/chromecast/net/fake_stream_socket_unittest.cc
@@ -14,6 +14,7 @@ #include "net/base/io_buffer.h" #include "net/base/ip_endpoint.h" #include "net/base/net_errors.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromecast { @@ -74,7 +75,8 @@ EXPECT_EQ(net::ERR_IO_PENDING, socket_1_.Read(io_buffer.get(), 1, base::Bind(&Callback))); EXPECT_EQ(net::ERR_SOCKET_NOT_CONNECTED, - socket_1_.Write(io_buffer.get(), 1, base::Bind(&Callback))); + socket_1_.Write(io_buffer.get(), 1, base::Bind(&Callback), + TRAFFIC_ANNOTATION_FOR_TESTS)); } TEST_F(FakeStreamSocketTest, ReadAndWriteWithPeer) { @@ -85,7 +87,8 @@ new net::StringIOBuffer(kData)); ASSERT_EQ( static_cast<int>(kData.size()), - socket_1_.Write(send_buffer.get(), kData.size(), base::Bind(&Callback))); + socket_1_.Write(send_buffer.get(), kData.size(), base::Bind(&Callback), + TRAFFIC_ANNOTATION_FOR_TESTS)); scoped_refptr<net::IOBuffer> receive_buffer(new net::IOBuffer(kData.size())); ASSERT_EQ(static_cast<int>(kData.size()), socket_2_.Read(receive_buffer.get(), kData.size(), @@ -105,7 +108,8 @@ new net::StringIOBuffer(kData)); ASSERT_EQ( static_cast<int>(kData.size()), - socket_1_.Write(send_buffer.get(), kData.size(), base::Bind(&Callback))); + socket_1_.Write(send_buffer.get(), kData.size(), base::Bind(&Callback), + TRAFFIC_ANNOTATION_FOR_TESTS)); EXPECT_EQ(0, std::memcmp(kData.data(), receive_buffer->data(), kData.size())); } @@ -118,9 +122,10 @@ new net::StringIOBuffer(kData)); const int kWriteCount = 1024 * 1024 / kData.size(); for (int i = 0; i < kWriteCount; i++) { - ASSERT_EQ(static_cast<int>(kData.size()), - socket_1_.Write(send_buffer.get(), kData.size(), - base::Bind(&Callback))); + ASSERT_EQ( + static_cast<int>(kData.size()), + socket_1_.Write(send_buffer.get(), kData.size(), base::Bind(&Callback), + TRAFFIC_ANNOTATION_FOR_TESTS)); } scoped_refptr<net::IOBuffer> receive_buffer(new net::IOBuffer(1024)); for (int i = 0; i < 1024; i++) {
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index 941cf63..f90aaa7 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -50,6 +50,8 @@ "rotation_lock/arc_rotation_lock_bridge.h", "storage_manager/arc_storage_manager.cc", "storage_manager/arc_storage_manager.h", + "usb/usb_host_bridge.cc", + "usb/usb_host_bridge.h", "volume_mounter/arc_volume_mounter_bridge.cc", "volume_mounter/arc_volume_mounter_bridge.h", ] @@ -75,7 +77,11 @@ "//components/url_formatter", "//components/user_manager", "//content/public/common", + "//device/base", "//device/bluetooth", + "//device/usb", + "//device/usb/mojo", + "//device/usb/public/interfaces", "//google_apis", "//mojo/edk/system", "//services/device/public/interfaces",
diff --git a/components/arc/arc_bridge_host_impl.cc b/components/arc/arc_bridge_host_impl.cc index 17a6f0e..eb7aaae 100644 --- a/components/arc/arc_bridge_host_impl.cc +++ b/components/arc/arc_bridge_host_impl.cc
@@ -248,6 +248,11 @@ OnInstanceReady(arc_bridge_service_->tts(), std::move(tts_ptr)); } +void ArcBridgeHostImpl::OnUsbHostInstanceReady( + mojom::UsbHostInstancePtr usb_host_ptr) { + OnInstanceReady(arc_bridge_service_->usb_host(), std::move(usb_host_ptr)); +} + void ArcBridgeHostImpl::OnVideoInstanceReady( mojom::VideoInstancePtr video_ptr) { OnInstanceReady(arc_bridge_service_->video(), std::move(video_ptr));
diff --git a/components/arc/arc_bridge_host_impl.h b/components/arc/arc_bridge_host_impl.h index 604aedb..0a7374a 100644 --- a/components/arc/arc_bridge_host_impl.h +++ b/components/arc/arc_bridge_host_impl.h
@@ -86,6 +86,7 @@ mojom::StorageManagerInstancePtr storage_manager_ptr) override; void OnTracingInstanceReady(mojom::TracingInstancePtr trace_ptr) override; void OnTtsInstanceReady(mojom::TtsInstancePtr tts_ptr) override; + void OnUsbHostInstanceReady(mojom::UsbHostInstancePtr usb_host_ptr) override; void OnVideoInstanceReady(mojom::VideoInstancePtr video_ptr) override; void OnVoiceInteractionArcHomeInstanceReady( mojom::VoiceInteractionArcHomeInstancePtr home_ptr) override;
diff --git a/components/arc/arc_bridge_service.h b/components/arc/arc_bridge_service.h index 50aef34..6cfd090 100644 --- a/components/arc/arc_bridge_service.h +++ b/components/arc/arc_bridge_service.h
@@ -69,6 +69,8 @@ class TracingInstance; class TtsHost; class TtsInstance; +class UsbHostHost; +class UsbHostInstance; class VideoHost; class VideoInstance; class VoiceInteractionArcHomeHost; @@ -184,6 +186,9 @@ } ConnectionHolder<mojom::TracingInstance>* tracing() { return &tracing_; } ConnectionHolder<mojom::TtsInstance, mojom::TtsHost>* tts() { return &tts_; } + ConnectionHolder<mojom::UsbHostInstance, mojom::UsbHostHost>* usb_host() { + return &usb_host_; + } ConnectionHolder<mojom::VideoInstance, mojom::VideoHost>* video() { return &video_; } @@ -247,6 +252,7 @@ ConnectionHolder<mojom::StorageManagerInstance> storage_manager_; ConnectionHolder<mojom::TracingInstance> tracing_; ConnectionHolder<mojom::TtsInstance, mojom::TtsHost> tts_; + ConnectionHolder<mojom::UsbHostInstance, mojom::UsbHostHost> usb_host_; ConnectionHolder<mojom::VideoInstance, mojom::VideoHost> video_; ConnectionHolder<mojom::VoiceInteractionArcHomeInstance, mojom::VoiceInteractionArcHomeHost>
diff --git a/components/arc/common/BUILD.gn b/components/arc/common/BUILD.gn index 4cab264..ffd8c52 100644 --- a/components/arc/common/BUILD.gn +++ b/components/arc/common/BUILD.gn
@@ -46,6 +46,7 @@ "storage_manager.mojom", "tracing.mojom", "tts.mojom", + "usb_host.mojom", "voice_interaction_arc_home.mojom", "voice_interaction_framework.mojom", "volume_mounter.mojom",
diff --git a/components/arc/common/arc_bridge.mojom b/components/arc/common/arc_bridge.mojom index 297c99a..c779b381 100644 --- a/components/arc/common/arc_bridge.mojom +++ b/components/arc/common/arc_bridge.mojom
@@ -35,15 +35,16 @@ import "storage_manager.mojom"; import "tracing.mojom"; import "tts.mojom"; +import "usb_host.mojom"; import "video.mojom"; import "voice_interaction_arc_home.mojom"; import "voice_interaction_framework.mojom"; import "volume_mounter.mojom"; import "wallpaper.mojom"; -// Next MinVersion: 34 +// Next MinVersion: 35 // Deprecated method IDs: 101, 105 -// Next method ID: 139 +// Next method ID: 140 interface ArcBridgeHost { // Keep the entries alphabetical. In order to do so without breaking // compatibility with the ARC instance, explicitly assign each interface a @@ -150,6 +151,9 @@ // Notifies Chrome that the TtsInstance interface is ready. [MinVersion=17] OnTtsInstanceReady@123(TtsInstance instance_ptr); + // Notifies Chrome that the UsbHostInstance interface is ready. + [MinVersion=34] OnUsbHostInstanceReady@139(UsbHostInstance instance_ptr); + // Notifies Chrome that the VideoInstance interface is ready. [MinVersion=6] OnVideoInstanceReady@107(VideoInstance instance_ptr);
diff --git a/components/arc/common/usb_host.mojom b/components/arc/common/usb_host.mojom new file mode 100644 index 0000000..abdeac8 --- /dev/null +++ b/components/arc/common/usb_host.mojom
@@ -0,0 +1,44 @@ +// 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. + +// Next MinVersion: 1 +module arc.mojom; + +// re-use device.mojom.UsbDeviceInfo +import "device/usb/public/interfaces/device.mojom"; + +// Next method ID: 3 +interface UsbHostHost { + // Tries the open the USB device node for the device named 'guid' + // and returns an open file descriptor to this node. + // You need to have previously called RequestPermission for this 'guid' + // else this call will fail. + OpenDevice@0(string guid) => (handle usb_fd); + + // Returns the USB device descriptors for the device named 'guid'. + GetDeviceInfo@1(string guid) => (string device_name, + device.mojom.UsbDeviceInfo info); + + // Asks for the permission to access the USB device called 'guid', + // if 'guid' is an empty string, requests the permission to list USB devices + // instead. + // if the permission hasn't successfully obtained in the past, this will + // trigger a UI pop-up requesting the user authorization on the behalf of + // the package 'pkg_name' if 'interactive' is set to true, or fail + // immediately. + RequestPermission@2(string guid, string pkg_name, bool interactive) + => (bool authorized); +}; + +// Next method ID: 3 +interface UsbHostInstance { + // Establishes full-duplex communication with the host. + Init@0(UsbHostHost host_ptr) => (); + + // Notifies the instance of a new USB device. + OnDeviceAdded@1(string guid); + + // Notifies the instance of the removal of a USB device. + OnDeviceRemoved@2(string guid); +};
diff --git a/components/arc/test/fake_arc_bridge_host.cc b/components/arc/test/fake_arc_bridge_host.cc index e3d39bd..148f5c22 100644 --- a/components/arc/test/fake_arc_bridge_host.cc +++ b/components/arc/test/fake_arc_bridge_host.cc
@@ -98,6 +98,9 @@ void FakeArcBridgeHost::OnTtsInstanceReady(mojom::TtsInstancePtr tts_ptr) {} +void FakeArcBridgeHost::OnUsbHostInstanceReady( + mojom::UsbHostInstancePtr usb_ptr) {} + void FakeArcBridgeHost::OnVideoInstanceReady( mojom::VideoInstancePtr video_ptr) {}
diff --git a/components/arc/test/fake_arc_bridge_host.h b/components/arc/test/fake_arc_bridge_host.h index d8ca679..cce1ad2b 100644 --- a/components/arc/test/fake_arc_bridge_host.h +++ b/components/arc/test/fake_arc_bridge_host.h
@@ -64,6 +64,7 @@ mojom::StorageManagerInstancePtr storage_manager_ptr) override; void OnTracingInstanceReady(mojom::TracingInstancePtr trace_ptr) override; void OnTtsInstanceReady(mojom::TtsInstancePtr tts_ptr) override; + void OnUsbHostInstanceReady(mojom::UsbHostInstancePtr usb_ptr) override; void OnVideoInstanceReady(mojom::VideoInstancePtr video_ptr) override; void OnVoiceInteractionArcHomeInstanceReady( mojom::VoiceInteractionArcHomeInstancePtr home_ptr) override;
diff --git a/components/arc/usb/DEPS b/components/arc/usb/DEPS new file mode 100644 index 0000000..1c02ffb --- /dev/null +++ b/components/arc/usb/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + "+device/base", + "+device/usb", +]
diff --git a/components/arc/usb/usb_host_bridge.cc b/components/arc/usb/usb_host_bridge.cc new file mode 100644 index 0000000..5da8a8f --- /dev/null +++ b/components/arc/usb/usb_host_bridge.cc
@@ -0,0 +1,259 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/arc/usb/usb_host_bridge.h" + +#include "base/bind.h" +#include "base/logging.h" +#include "base/memory/singleton.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/permission_broker_client.h" +#include "components/arc/arc_bridge_service.h" +#include "components/arc/arc_browser_context_keyed_service_factory_base.h" +#include "device/base/device_client.h" +#include "device/usb/mojo/type_converters.h" +#include "device/usb/usb_device_handle.h" +#include "device/usb/usb_device_linux.h" +#include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/scoped_platform_handle.h" + +namespace arc { +namespace { + +// Singleton factory for ArcUsbHostBridge +class ArcUsbHostBridgeFactory + : public internal::ArcBrowserContextKeyedServiceFactoryBase< + ArcUsbHostBridge, + ArcUsbHostBridgeFactory> { + public: + // Factory name used by ArcBrowserContextKeyedServiceFactoryBase. + static constexpr const char* kName = "ArcUsbHostBridgeFactory"; + + static ArcUsbHostBridgeFactory* GetInstance() { + return base::Singleton<ArcUsbHostBridgeFactory>::get(); + } + + private: + friend base::DefaultSingletonTraits<ArcUsbHostBridgeFactory>; + ArcUsbHostBridgeFactory() = default; + ~ArcUsbHostBridgeFactory() override = default; +}; + +void OnDeviceOpened(mojom::UsbHostHost::OpenDeviceCallback callback, + base::ScopedFD fd) { + if (!fd.is_valid()) { + LOG(ERROR) << "Invalid USB device FD"; + std::move(callback).Run(mojo::ScopedHandle()); + return; + } + mojo::edk::ScopedPlatformHandle platform_handle{ + mojo::edk::PlatformHandle(fd.release())}; + MojoHandle wrapped_handle; + MojoResult wrap_result = mojo::edk::CreatePlatformHandleWrapper( + std::move(platform_handle), &wrapped_handle); + if (wrap_result != MOJO_RESULT_OK) { + LOG(ERROR) << "Failed to wrap device FD. Closing: " << wrap_result; + std::move(callback).Run(mojo::ScopedHandle()); + return; + } + mojo::ScopedHandle scoped_handle{mojo::Handle(wrapped_handle)}; + std::move(callback).Run(std::move(scoped_handle)); +} + +void OnDeviceOpenError(mojom::UsbHostHost::OpenDeviceCallback callback, + const std::string& error_name, + const std::string& error_message) { + LOG(WARNING) << "Cannot open USB device: " << error_name << ": " + << error_message; + std::move(callback).Run(mojo::ScopedHandle()); +} + +using CheckedCallback = + base::RepeatingCallback<void(const std::string& guid, bool success)>; + +void OnGetDevicesComplete( + const CheckedCallback& callback, + const std::vector<scoped_refptr<device::UsbDevice>>& devices) { + for (const scoped_refptr<device::UsbDevice>& device : devices) + device->CheckUsbAccess(base::BindOnce(callback, device.get()->guid())); +} + +} // namespace + +ArcUsbHostBridge* ArcUsbHostBridge::GetForBrowserContext( + content::BrowserContext* context) { + return ArcUsbHostBridgeFactory::GetForBrowserContext(context); +} + +ArcUsbHostBridge::ArcUsbHostBridge(content::BrowserContext* context, + ArcBridgeService* bridge_service) + : arc_bridge_service_(bridge_service), + usb_observer_(this), + weak_factory_(this) { + arc_bridge_service_->usb_host()->SetHost(this); + arc_bridge_service_->usb_host()->AddObserver(this); + + usb_service_ = device::DeviceClient::Get()->GetUsbService(); + if (usb_service_) + usb_observer_.Add(usb_service_); +} + +ArcUsbHostBridge::~ArcUsbHostBridge() { + if (usb_service_) + usb_service_->RemoveObserver(this); + arc_bridge_service_->usb_host()->RemoveObserver(this); + arc_bridge_service_->usb_host()->SetHost(nullptr); +} + +void ArcUsbHostBridge::RequestPermission(const std::string& guid, + const std::string& package, + bool interactive, + RequestPermissionCallback callback) { + VLOG(2) << "USB RequestPermission " << guid << " package " << package; + // Permission already requested. + if (HasPermissionForDevice(guid)) { + std::move(callback).Run(true); + return; + } + + // The other side was just checking, fail without asking the user. + if (!interactive) { + std::move(callback).Run(false); + return; + } + + // Ask the authorization from the user. + DoRequestUserAuthorization(guid, package, std::move(callback)); +} + +void ArcUsbHostBridge::OpenDevice(const std::string& guid, + OpenDeviceCallback callback) { + if (!usb_service_) { + std::move(callback).Run(mojo::ScopedHandle()); + return; + } + + device::UsbDeviceLinux* device = + static_cast<device::UsbDeviceLinux*>(usb_service_->GetDevice(guid).get()); + if (!device) { + std::move(callback).Run(mojo::ScopedHandle()); + return; + } + + // The RequestPermission was never done, abort. + if (!HasPermissionForDevice(guid)) { + std::move(callback).Run(mojo::ScopedHandle()); + return; + } + + chromeos::PermissionBrokerClient* client = + chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); + DCHECK(client) << "Could not get permission broker client."; + auto repeating_callback = + base::AdaptCallbackForRepeating(std::move(callback)); + client->OpenPath(device->device_path(), + base::Bind(&OnDeviceOpened, repeating_callback), + base::Bind(&OnDeviceOpenError, repeating_callback)); +} + +void ArcUsbHostBridge::GetDeviceInfo(const std::string& guid, + GetDeviceInfoCallback callback) { + if (!usb_service_) { + std::move(callback).Run(std::string(), nullptr); + return; + } + scoped_refptr<device::UsbDevice> device = usb_service_->GetDevice(guid); + if (!device.get()) { + LOG(WARNING) << "Unknown USB device " << guid; + std::move(callback).Run(std::string(), nullptr); + return; + } + + device::mojom::UsbDeviceInfoPtr info = + device::mojom::UsbDeviceInfo::From(*device); + // b/69295049 the other side doesn't like optional strings. + for (const device::mojom::UsbConfigurationInfoPtr& cfg : + info->configurations) { + cfg->configuration_name = + cfg->configuration_name.value_or(base::string16()); + for (const device::mojom::UsbInterfaceInfoPtr& iface : cfg->interfaces) { + for (const device::mojom::UsbAlternateInterfaceInfoPtr& alt : + iface->alternates) { + alt->interface_name = alt->interface_name.value_or(base::string16()); + } + } + } + + std::string path = + static_cast<device::UsbDeviceLinux*>(device.get())->device_path(); + + std::move(callback).Run(path, std::move(info)); +} + +// device::UsbService::Observer callbacks. + +void ArcUsbHostBridge::OnDeviceAdded(scoped_refptr<device::UsbDevice> device) { + device->CheckUsbAccess(base::BindOnce(&ArcUsbHostBridge::OnDeviceChecked, + weak_factory_.GetWeakPtr(), + device.get()->guid())); +} + +void ArcUsbHostBridge::OnDeviceRemoved( + scoped_refptr<device::UsbDevice> device) { + mojom::UsbHostInstance* usb_host_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->usb_host(), OnDeviceAdded); + + if (!usb_host_instance) { + VLOG(2) << "UsbInstance not ready yet"; + return; + } + + usb_host_instance->OnDeviceRemoved(device.get()->guid()); +} + +// Notifies the observer that the UsbService it depends on is shutting down. +void ArcUsbHostBridge::WillDestroyUsbService() { + // Disconnect. + arc_bridge_service_->usb_host()->SetHost(nullptr); +} + +void ArcUsbHostBridge::OnConnectionReady() { + if (!usb_service_) + return; + // Send the (filtered) list of already existing USB devices to the other side. + usb_service_->GetDevices( + base::Bind(&OnGetDevicesComplete, + base::BindRepeating(&ArcUsbHostBridge::OnDeviceChecked, + weak_factory_.GetWeakPtr()))); +} + +void ArcUsbHostBridge::OnDeviceChecked(const std::string& guid, bool allowed) { + if (!allowed) + return; + + mojom::UsbHostInstance* usb_host_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->usb_host(), OnDeviceAdded); + + if (!usb_host_instance) + return; + + usb_host_instance->OnDeviceAdded(guid); +} + +void ArcUsbHostBridge::DoRequestUserAuthorization( + const std::string& guid, + const std::string& package, + RequestPermissionCallback callback) { + // TODO: implement the UI dialog + // fail close for now + std::move(callback).Run(false); +} + +bool ArcUsbHostBridge::HasPermissionForDevice(const std::string& guid) { + // TODO: implement permission settings + // fail close for now + return false; +} + +} // namespace arc
diff --git a/components/arc/usb/usb_host_bridge.h b/components/arc/usb/usb_host_bridge.h new file mode 100644 index 0000000..8d9f8fd --- /dev/null +++ b/components/arc/usb/usb_host_bridge.h
@@ -0,0 +1,85 @@ +// 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 COMPONENTS_ARC_USB_USB_HOST_BRIDGE_H_ +#define COMPONENTS_ARC_USB_USB_HOST_BRIDGE_H_ + +#include <string> +#include <vector> + +#include "base/callback_forward.h" +#include "base/files/scoped_file.h" +#include "base/macros.h" +#include "base/scoped_observer.h" +#include "components/arc/common/usb_host.mojom.h" +#include "components/arc/connection_observer.h" +#include "components/keyed_service/core/keyed_service.h" +#include "device/usb/public/interfaces/device_manager.mojom.h" +#include "device/usb/usb_device.h" +#include "device/usb/usb_service.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace arc { + +class ArcBridgeService; + +// Private implementation of UsbHostHost. +class ArcUsbHostBridge : public KeyedService, + public ConnectionObserver<mojom::UsbHostInstance>, + public device::UsbService::Observer, + public mojom::UsbHostHost { + public: + // Returns singleton instance for the given BrowserContext, + // or nullptr if the browser |context| is not allowed to use ARC. + static ArcUsbHostBridge* GetForBrowserContext( + content::BrowserContext* context); + + // The constructor will register an Observer with ArcBridgeService. + explicit ArcUsbHostBridge(content::BrowserContext* context, + ArcBridgeService* bridge_service); + ~ArcUsbHostBridge() override; + + // mojom::UsbHostHost overrides: + void RequestPermission(const std::string& guid, + const std::string& package, + bool interactive, + RequestPermissionCallback callback) override; + void OpenDevice(const std::string& guid, + OpenDeviceCallback callback) override; + void GetDeviceInfo(const std::string& guid, + GetDeviceInfoCallback callback) override; + + // device::UsbService::Observer overrides: + void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override; + void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device) override; + void WillDestroyUsbService() override; + + // ConnectionObserver<mojom::UsbHostInstance> overrides: + void OnConnectionReady() override; + + private: + void OnDeviceChecked(const std::string& guid, bool allowed); + void DoRequestUserAuthorization(const std::string& guid, + const std::string& package, + RequestPermissionCallback callback); + bool HasPermissionForDevice(const std::string& guid); + + ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager. + mojom::UsbHostHostPtr usb_host_ptr_; + ScopedObserver<device::UsbService, device::UsbService::Observer> + usb_observer_; + device::UsbService* usb_service_; + + // WeakPtrFactory to use for callbacks. + base::WeakPtrFactory<ArcUsbHostBridge> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(ArcUsbHostBridge); +}; + +} // namespace arc + +#endif // COMPONENTS_ARC_USB_USB_HOST_BRIDGE_H_
diff --git a/components/autofill/core/browser/credit_card_save_manager_unittest.cc b/components/autofill/core/browser/credit_card_save_manager_unittest.cc index 38272c8..11d47e9 100644 --- a/components/autofill/core/browser/credit_card_save_manager_unittest.cc +++ b/components/autofill/core/browser/credit_card_save_manager_unittest.cc
@@ -1575,7 +1575,7 @@ FormsSeen(std::vector<FormData>(1, credit_card_form)); ExpectFillableFormParsedUkm(3 /* num_fillable_forms_parsed */); - // Edit the data, but don't include a name, and submit. + // Edit the data and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -1619,7 +1619,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen({credit_card_form}); - // Edit the data, but don't include a name, and submit. + // Edit the data and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -1663,7 +1663,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen({credit_card_form}); - // Edit the data, but don't include a name, and submit. + // Edit the data and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -1710,7 +1710,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen(std::vector<FormData>(1, credit_card_form)); - // Edit the data, but don't include a name, and submit. + // Edit the data and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11");
diff --git a/components/certificate_transparency/single_tree_tracker_unittest.cc b/components/certificate_transparency/single_tree_tracker_unittest.cc index 95f3e2f..59ba2af 100644 --- a/components/certificate_transparency/single_tree_tracker_unittest.cc +++ b/components/certificate_transparency/single_tree_tracker_unittest.cc
@@ -174,10 +174,9 @@ const std::string& hostname, net::HostCache::Entry::Source source, base::TimeDelta ttl) { - CHECK(cache); - const net::HostCache::Key key(hostname, net::ADDRESS_FAMILY_UNSPECIFIED, 0); - const net::HostCache::Entry entry(net::OK, net::AddressList(), source); - cache->Set(key, entry, base::TimeTicks::Now(), ttl); + cache->Set(net::HostCache::Key(hostname, net::ADDRESS_FAMILY_UNSPECIFIED, 0), + net::HostCache::Entry(net::OK, net::AddressList(), source), + base::TimeTicks::Now(), ttl); } } // namespace
diff --git a/components/discardable_memory/DEPS b/components/discardable_memory/DEPS index 093b1d9..6d3523e 100644 --- a/components/discardable_memory/DEPS +++ b/components/discardable_memory/DEPS
@@ -1,3 +1,4 @@ include_rules = [ + "+components/crash/core/common/crash_key.h", "+mojo/public/cpp", ]
diff --git a/components/discardable_memory/client/BUILD.gn b/components/discardable_memory/client/BUILD.gn index 8cf73572..ecf93c2 100644 --- a/components/discardable_memory/client/BUILD.gn +++ b/components/discardable_memory/client/BUILD.gn
@@ -16,6 +16,7 @@ deps = [ "//base", + "//components/crash/core/common:crash_key", "//components/discardable_memory/common", "//components/discardable_memory/public/interfaces", ]
diff --git a/components/discardable_memory/client/client_discardable_shared_memory_manager.cc b/components/discardable_memory/client/client_discardable_shared_memory_manager.cc index a078874..245bfe4 100644 --- a/components/discardable_memory/client/client_discardable_shared_memory_manager.cc +++ b/components/discardable_memory/client/client_discardable_shared_memory_manager.cc
@@ -11,7 +11,6 @@ #include "base/atomic_sequence_num.h" #include "base/bind.h" -#include "base/debug/crash_logging.h" #include "base/macros.h" #include "base/memory/discardable_memory.h" #include "base/memory/discardable_shared_memory.h" @@ -25,6 +24,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/trace_event.h" +#include "components/crash/core/common/crash_key.h" #include "mojo/public/cpp/system/platform_handle.h" namespace discardable_memory { @@ -410,14 +410,13 @@ void ClientDiscardableSharedMemoryManager::MemoryUsageChanged( size_t new_bytes_total, size_t new_bytes_free) const { - static const char kDiscardableMemoryAllocatedKey[] = - "discardable-memory-allocated"; - base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey, - base::NumberToString(new_bytes_total)); + static crash_reporter::CrashKeyString<24> discardable_memory_allocated( + "discardable-memory-allocated"); + discardable_memory_allocated.Set(base::NumberToString(new_bytes_total)); - static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free"; - base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey, - base::NumberToString(new_bytes_free)); + static crash_reporter::CrashKeyString<24> discardable_memory_free( + "discardable-memory-free"); + discardable_memory_free.Set(base::NumberToString(new_bytes_free)); } } // namespace discardable_memory
diff --git a/components/discardable_memory/service/BUILD.gn b/components/discardable_memory/service/BUILD.gn index 6ac608b7..59f8817d 100644 --- a/components/discardable_memory/service/BUILD.gn +++ b/components/discardable_memory/service/BUILD.gn
@@ -16,6 +16,7 @@ deps = [ "//base", + "//components/crash/core/common:crash_key", "//components/discardable_memory/common", "//components/discardable_memory/public/interfaces", ]
diff --git a/components/discardable_memory/service/discardable_shared_memory_manager.cc b/components/discardable_memory/service/discardable_shared_memory_manager.cc index e039f0b5..d36d0fa 100644 --- a/components/discardable_memory/service/discardable_shared_memory_manager.cc +++ b/components/discardable_memory/service/discardable_shared_memory_manager.cc
@@ -12,7 +12,6 @@ #include "base/bind.h" #include "base/callback.h" #include "base/command_line.h" -#include "base/debug/crash_logging.h" #include "base/macros.h" #include "base/memory/discardable_memory.h" #include "base/memory/memory_coordinator_client_registry.h" @@ -29,6 +28,7 @@ #include "base/trace_event/process_memory_dump.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" +#include "components/crash/core/common/crash_key.h" #include "components/discardable_memory/common/discardable_shared_memory_heap.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/system/platform_handle.h" @@ -617,10 +617,9 @@ void DiscardableSharedMemoryManager::BytesAllocatedChanged( size_t new_bytes_allocated) const { - static const char kTotalDiscardableMemoryAllocatedKey[] = - "total-discardable-memory-allocated"; - base::debug::SetCrashKeyValue(kTotalDiscardableMemoryAllocatedKey, - base::NumberToString(new_bytes_allocated)); + static crash_reporter::CrashKeyString<24> total_discardable_memory( + "total-discardable-memory-allocated"); + total_discardable_memory.Set(base::NumberToString(new_bytes_allocated)); } base::Time DiscardableSharedMemoryManager::Now() const {
diff --git a/components/neterror/OWNERS b/components/neterror/OWNERS index 0dd67b9f..40148ee4 100644 --- a/components/neterror/OWNERS +++ b/components/neterror/OWNERS
@@ -1,4 +1,3 @@ -jar@chromium.org mmenke@chromium.org juliatuttle@chromium.org edwardjung@chromium.org
diff --git a/components/network_hints/OWNERS b/components/network_hints/OWNERS index 76224884..510eb168 100644 --- a/components/network_hints/OWNERS +++ b/components/network_hints/OWNERS
@@ -1,2 +1 @@ -jar@chromium.org juliatuttle@chromium.org
diff --git a/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java b/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java index 34a4ff5c..6ba0455 100644 --- a/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java +++ b/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java
@@ -7,7 +7,6 @@ import android.accounts.Account; import android.accounts.AuthenticatorDescription; import android.app.Activity; -import android.content.Context; import android.support.annotation.IntDef; import android.support.annotation.Nullable; @@ -17,7 +16,6 @@ import org.chromium.base.Log; import org.chromium.base.ObserverList; import org.chromium.base.ThreadUtils; -import org.chromium.base.VisibleForTesting; import org.chromium.components.signin.AccountManagerDelegate; import org.chromium.components.signin.AccountManagerDelegateException; import org.chromium.components.signin.AccountManagerFacade; @@ -117,23 +115,12 @@ private boolean mRegisterObserversCalled; private FakeProfileDataSource mFakeProfileDataSource; - @VisibleForTesting public FakeAccountManagerDelegate(@ProfileDataSourceFlag int profileDataSourceFlag) { if (profileDataSourceFlag == ENABLE_PROFILE_DATA_SOURCE) { mFakeProfileDataSource = new FakeProfileDataSource(); } } - /** Will be removed after fixing downstream clients. */ - @Deprecated - public FakeAccountManagerDelegate(Context context, Account... accounts) { - if (accounts != null) { - for (Account account : accounts) { - mAccounts.add(AccountHolder.builder(account).alwaysAccept(true).build()); - } - } - } - public void setProfileData( String accountId, @Nullable ProfileDataSource.ProfileData profileData) { assert mFakeProfileDataSource != null : "ProfileDataSource was disabled!";
diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc index 5f6765f..3931676 100644 --- a/content/browser/renderer_host/delegated_frame_host.cc +++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -299,8 +299,12 @@ } void DelegatedFrameHost::WasResized() { + const viz::SurfaceId* primary_surface_id = + client_->DelegatedFrameHostGetLayer()->GetPrimarySurfaceId(); if (enable_surface_synchronization_ && - client_->DelegatedFrameHostIsVisible()) { + client_->DelegatedFrameHostIsVisible() && + (!primary_surface_id || primary_surface_id->local_surface_id() != + client_->GetLocalSurfaceId())) { current_frame_size_in_dip_ = client_->DelegatedFrameHostDesiredSizeInDIP(); viz::SurfaceId surface_id(frame_sink_id_, client_->GetLocalSurfaceId());
diff --git a/docs/ios/build_instructions.md b/docs/ios/build_instructions.md index 60e943f..1d0c76a 100644 --- a/docs/ios/build_instructions.md +++ b/docs/ios/build_instructions.md
@@ -12,7 +12,7 @@ ## System requirements -* A 64-bit Mac running 10.11+. +* A 64-bit Mac running 10.12.6 or later. * [Xcode](https://developer.apple.com/xcode) 9.0+. * The current version of the JDK (required for the Closure compiler). @@ -226,6 +226,10 @@ $ out/Debug-iphonesimulator/iossim out/Debug-iphonesimulator/Chromium.app ``` +With Xcode 9, `iossim` no longer automatically launches the Simulator. This must now +be done manually from within Xcode (`Xcode > Open Developer Tool > Simulator`), and +also must be done *after* running `iossim`. + ### Passing arguments Arguments needed to be passed to the test application through `iossim`, such as
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm index 64fed38..8e01bb0b 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_view_controller.mm
@@ -194,6 +194,7 @@ // safeAreaInsets. Since this situation is universally called for the full // screen new tab animation, it's safe to check the rootViewController's // view instead. + // TODO(crbug.com/791784) : Remove use of rootViewController. UIView* insetsView = self.headerView; if (!self.headerView.window) { insetsView =
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index 050058f..58fa0211 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -444,10 +444,6 @@ overscrollActionsControllerDelegate_ = overscrollActionsControllerDelegate; } -- (void)webDidUpdateSessionForLoadWithURL:(const GURL&)URL { - // TODO(crbug.com/674991): Remove this method. -} - // Halt the tab, which amounts to halting its webController. - (void)terminateNetworkActivity { [self.webController terminateNetworkActivity];
diff --git a/ios/chrome/browser/ui/download/pass_kit_coordinator.mm b/ios/chrome/browser/ui/download/pass_kit_coordinator.mm index 11401f7..fff487e 100644 --- a/ios/chrome/browser/ui/download/pass_kit_coordinator.mm +++ b/ios/chrome/browser/ui/download/pass_kit_coordinator.mm
@@ -71,6 +71,10 @@ // Presents PKAddPassesViewController. - (void)presentAddPassUI { + if (![PKAddPassesViewController canAddPasses]) { + [self stop]; + return; + } _viewController = [[PKAddPassesViewController alloc] initWithPass:self.pass]; _viewController.delegate = self; [self.baseViewController presentViewController:_viewController
diff --git a/ios/chrome/browser/ui/download/pass_kit_coordinator_unittest.mm b/ios/chrome/browser/ui/download/pass_kit_coordinator_unittest.mm index 655d279..4c4bbc6 100644 --- a/ios/chrome/browser/ui/download/pass_kit_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/download/pass_kit_coordinator_unittest.mm
@@ -27,6 +27,7 @@ #endif using testing::WaitUntilConditionOrTimeout; +using testing::kWaitForUIElementTimeout; // Test fixture for PassKitCoordinator class. class PassKitCoordinatorTest : public PlatformTest { @@ -57,11 +58,6 @@ // Tests that PassKitCoordinator presents PKAddPassesViewController for the // valid PKPass object. TEST_F(PassKitCoordinatorTest, ValidPassKitObject) { - if (IsIPadIdiom()) { - // Wallet app is not supported on iPads. - return; - } - std::string data = testing::GetTestPass(); NSData* nsdata = [NSData dataWithBytes:data.c_str() length:data.size()]; PKPass* pass = [[PKPass alloc] initWithData:nsdata error:nil]; @@ -72,16 +68,21 @@ presentDialogForPass:pass webState:web_state_.get()]; - EXPECT_TRUE(WaitUntilConditionOrTimeout(testing::kWaitForUIElementTimeout, ^{ - return [base_view_controller_.presentedViewController class] == - [PKAddPassesViewController class]; - })); + if (IsIPadIdiom()) { + // Wallet app is not supported on iPads. + } else { + EXPECT_TRUE(WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^{ + return [base_view_controller_.presentedViewController class] == + [PKAddPassesViewController class]; + })); - [coordinator_ stop]; + [coordinator_ stop]; - EXPECT_TRUE(WaitUntilConditionOrTimeout(testing::kWaitForUIElementTimeout, ^{ - return base_view_controller_.presentedViewController == nil; - })); + EXPECT_TRUE(WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^{ + return base_view_controller_.presentedViewController == nil; + })); + } + EXPECT_FALSE(coordinator_.webState); EXPECT_FALSE(coordinator_.pass); }
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm index 8460aa1..6b87567 100644 --- a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm
@@ -165,7 +165,7 @@ -kToolbarButtonAnimationOffset forButtons: self.trailingStackViewButtons]; - [self setAllVisibleToolbarButtonsOpacity:0]; + [self setAllToolbarButtonsOpacity:0]; } completion:nil]; @@ -212,7 +212,7 @@ [NSLayoutConstraint activateConstraints:self.regularToolbarConstraints]; // Change the Toolbar buttons opacity to 0 since these will fade in once the // locationBarContainer has been contracted. - [self setAllVisibleToolbarButtonsOpacity:0]; + [self setAllToolbarButtonsOpacity:0]; [animator addAnimations:^{ self.locationBarContainer.layer.borderWidth = kLocationBarBorderWidth; [self.view layoutIfNeeded]; @@ -242,7 +242,7 @@ setHorizontalTranslationOffset:0 forButtons: self.trailingStackViewButtons]; - [self setAllVisibleToolbarButtonsOpacity:1]; + [self setAllToolbarButtonsOpacity:1]; } completion:nil]; }]; @@ -999,24 +999,23 @@ [self.dispatcher startVoiceSearch:command]; } -// Sets all Visible Toolbar Buttons opacity to |alpha|. -- (void)setAllVisibleToolbarButtonsOpacity:(CGFloat)alpha { +// Sets all Toolbar Buttons opacity to |alpha|. +- (void)setAllToolbarButtonsOpacity:(CGFloat)alpha { for (UIButton* button in [self.leadingStackViewButtons arrayByAddingObjectsFromArray:self.trailingStackViewButtons]) { - if (!button.hidden) button.alpha = alpha; } } // Offsets the horizontal translation transform of all visible Toolbar Buttons -// in |array| by |offset|. Used for fade in animations. +// in |array| by |offset|. If the button is hidden it will assign the +// IdentityTransform. Used for fade in animations. - (void)setHorizontalTranslationOffset:(LayoutOffset)offset forButtons:(NSArray<ToolbarButton*>*)array { for (UIButton* button in array) { - if (!button.hidden) - button.transform = (offset != 0) - ? CGAffineTransformMakeTranslation(offset, 0) - : CGAffineTransformIdentity; + button.transform = (offset != 0 && !button.hidden) + ? CGAffineTransformMakeTranslation(offset, 0) + : CGAffineTransformIdentity; } }
diff --git a/ios/web/navigation/navigation_manager_delegate.h b/ios/web/navigation/navigation_manager_delegate.h index 2d7698b..867879b0 100644 --- a/ios/web/navigation/navigation_manager_delegate.h +++ b/ios/web/navigation/navigation_manager_delegate.h
@@ -9,7 +9,6 @@ @protocol CRWWebViewNavigationProxy; -class GURL; namespace web { @@ -38,10 +37,6 @@ // navigation using a different user agent type. virtual void WillChangeUserAgentType() = 0; - // Instructs the delegate to notify its delegates that the current navigation - // item will be loaded. - virtual void WillLoadCurrentItemWithUrl(const GURL&) = 0; - // Instructs the delegate to load the current navigation item. virtual void LoadCurrentItem() = 0;
diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm index 6b49cc81..53c7124 100644 --- a/ios/web/navigation/navigation_manager_impl.mm +++ b/ios/web/navigation/navigation_manager_impl.mm
@@ -262,7 +262,6 @@ added_item->SetShouldSkipRepostFormConfirmation(true); } - delegate_->WillLoadCurrentItemWithUrl(params.url); delegate_->LoadCurrentItem(); }
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm index a642c9c5..c7d39974 100644 --- a/ios/web/navigation/navigation_manager_impl_unittest.mm +++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -73,7 +73,6 @@ MOCK_METHOD0(ClearTransientContent, void()); MOCK_METHOD0(RecordPageStateInNavigationItem, void()); MOCK_METHOD0(UpdateHtml5HistoryState, void()); - MOCK_METHOD1(WillLoadCurrentItemWithUrl, void(const GURL&)); MOCK_METHOD0(WillChangeUserAgentType, void()); MOCK_METHOD0(LoadCurrentItem, void()); MOCK_METHOD0(LoadIfNecessary, void()); @@ -2128,8 +2127,6 @@ EXPECT_CALL(navigation_manager_delegate(), RecordPageStateInNavigationItem()) .Times(1); EXPECT_CALL(navigation_manager_delegate(), ClearTransientContent()).Times(1); - EXPECT_CALL(navigation_manager_delegate(), - WillLoadCurrentItemWithUrl(::testing::Ref(params.url))); EXPECT_CALL(navigation_manager_delegate(), LoadCurrentItem()).Times(1); navigation_manager()->LoadURLWithParams(params); @@ -2161,8 +2158,6 @@ EXPECT_CALL(navigation_manager_delegate(), RecordPageStateInNavigationItem()) .Times(1); EXPECT_CALL(navigation_manager_delegate(), ClearTransientContent()).Times(1); - EXPECT_CALL(navigation_manager_delegate(), - WillLoadCurrentItemWithUrl(::testing::Ref(params.url))); EXPECT_CALL(navigation_manager_delegate(), LoadCurrentItem()).Times(1); navigation_manager()->LoadURLWithParams(params);
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm b/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm index 1a29a13..1b74274 100644 --- a/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm +++ b/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm
@@ -69,7 +69,6 @@ MOCK_METHOD0(ClearTransientContent, void()); MOCK_METHOD0(RecordPageStateInNavigationItem, void()); MOCK_METHOD0(UpdateHtml5HistoryState, void()); - MOCK_METHOD1(WillLoadCurrentItemWithUrl, void(const GURL&)); MOCK_METHOD0(WillChangeUserAgentType, void()); MOCK_METHOD0(LoadCurrentItem, void()); MOCK_METHOD0(LoadIfNecessary, void()); @@ -577,7 +576,6 @@ items.push_back(std::move(item0)); items.push_back(std::move(item1)); - EXPECT_CALL(delegate_, WillLoadCurrentItemWithUrl(testing::_)).Times(1); manager_->Restore(0 /* last_committed_item_index */, std::move(items)); NavigationItem* pending_item = manager_->GetPendingItem(); @@ -656,7 +654,6 @@ // Tests that Restore() accepts empty session history and performs no-op. TEST_F(WKBasedNavigationManagerTest, RestoreSessionWithEmptyHistory) { - EXPECT_CALL(delegate_, WillLoadCurrentItemWithUrl(testing::_)).Times(0); manager_->Restore(-1 /* last_committed_item_index */, std::vector<std::unique_ptr<NavigationItem>>());
diff --git a/ios/web/public/web_state/ui/crw_web_delegate.h b/ios/web/public/web_state/ui/crw_web_delegate.h index 1cda8c83..42dbf17 100644 --- a/ios/web/public/web_state/ui/crw_web_delegate.h +++ b/ios/web/public/web_state/ui/crw_web_delegate.h
@@ -37,15 +37,6 @@ - (void)webController:(CRWWebController*)webController retrievePlaceholderOverlayImage:(void (^)(UIImage*))block; -// --------------------------------------------------------------------- -// TODO(rohitrao): Eliminate as many of the following delegate methods as -// possible. They only exist because the Tab and CRWWebController logic was -// very intertwined. We should streamline the logic to jump between classes -// less, then remove any delegate method that becomes unnecessary as a result. - -// Called when a page is loaded using loadWithParams. -- (void)webDidUpdateSessionForLoadWithURL:(const GURL&)URL; - @optional // Called to ask CRWWebDelegate if |CRWWebController| should open the given URL.
diff --git a/ios/web/test/fakes/fake_navigation_manager_delegate.h b/ios/web/test/fakes/fake_navigation_manager_delegate.h index 5716aac..9fe648a 100644 --- a/ios/web/test/fakes/fake_navigation_manager_delegate.h +++ b/ios/web/test/fakes/fake_navigation_manager_delegate.h
@@ -7,7 +7,6 @@ #import "ios/web/navigation/navigation_manager_delegate.h" -class GURL; @protocol CRWWebViewNavigationProxy; namespace web { @@ -17,7 +16,6 @@ void ClearTransientContent() override; void RecordPageStateInNavigationItem() override; void UpdateHtml5HistoryState() override; - void WillLoadCurrentItemWithUrl(const GURL&) override; void WillChangeUserAgentType() override; void LoadCurrentItem() override; void LoadIfNecessary() override;
diff --git a/ios/web/test/fakes/fake_navigation_manager_delegate.mm b/ios/web/test/fakes/fake_navigation_manager_delegate.mm index 0932b3d..dc8b801 100644 --- a/ios/web/test/fakes/fake_navigation_manager_delegate.mm +++ b/ios/web/test/fakes/fake_navigation_manager_delegate.mm
@@ -15,7 +15,6 @@ void FakeNavigationManagerDelegate::ClearTransientContent() {} void FakeNavigationManagerDelegate::RecordPageStateInNavigationItem() {} void FakeNavigationManagerDelegate::UpdateHtml5HistoryState() {} -void FakeNavigationManagerDelegate::WillLoadCurrentItemWithUrl(const GURL&) {} void FakeNavigationManagerDelegate::WillChangeUserAgentType() {} void FakeNavigationManagerDelegate::LoadCurrentItem() {} void FakeNavigationManagerDelegate::LoadIfNecessary() {}
diff --git a/ios/web/web_state/ui/crw_web_controller.h b/ios/web/web_state/ui/crw_web_controller.h index 1fc59f6..b154faf 100644 --- a/ios/web/web_state/ui/crw_web_controller.h +++ b/ios/web/web_state/ui/crw_web_controller.h
@@ -158,11 +158,6 @@ // to generate an overlay placeholder view. - (BOOL)canUseViewForGeneratingOverlayPlaceholderView; -// Notifies delegate that |currentNavItem| will be loaded with |url|. -// TODO(crbug.com/674991): Remove this method when CRWWebDelegate is no longer -// used. -- (void)willLoadCurrentItemWithURL:(const GURL&)URL; - // Loads the URL indicated by current session state. - (void)loadCurrentURL;
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index 37f782b..ed3b16d 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -1792,10 +1792,6 @@ withCompletionHandler:completionHandler]; } -- (void)willLoadCurrentItemWithURL:(const GURL&)URL { - [_delegate webDidUpdateSessionForLoadWithURL:URL]; -} - - (void)loadCurrentURL { // If the content view doesn't exist, the tab has either been evicted, or // never displayed. Bail, and let the URL be loaded when the tab is shown.
diff --git a/ios/web/web_state/web_state_impl.h b/ios/web/web_state/web_state_impl.h index 07eed9a..b654261a 100644 --- a/ios/web/web_state/web_state_impl.h +++ b/ios/web/web_state/web_state_impl.h
@@ -277,7 +277,6 @@ void RecordPageStateInNavigationItem() override; void UpdateHtml5HistoryState() override; void WillChangeUserAgentType() override; - void WillLoadCurrentItemWithUrl(const GURL&) override; void LoadCurrentItem() override; void LoadIfNecessary() override; void Reload() override;
diff --git a/ios/web/web_state/web_state_impl.mm b/ios/web/web_state/web_state_impl.mm index 3fed0c3..a5eb6069 100644 --- a/ios/web/web_state/web_state_impl.mm +++ b/ios/web/web_state/web_state_impl.mm
@@ -783,10 +783,6 @@ [web_controller_ requirePageReconstruction]; } -void WebStateImpl::WillLoadCurrentItemWithUrl(const GURL& url) { - [web_controller_ willLoadCurrentItemWithURL:url]; -} - void WebStateImpl::LoadCurrentItem() { [web_controller_ loadCurrentURL]; }
diff --git a/jingle/glue/fake_ssl_client_socket.h b/jingle/glue/fake_ssl_client_socket.h index 64c34836..3ab9e641 100644 --- a/jingle/glue/fake_ssl_client_socket.h +++ b/jingle/glue/fake_ssl_client_socket.h
@@ -51,12 +51,11 @@ int Read(net::IOBuffer* buf, int buf_len, const net::CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. - int Write(net::IOBuffer* buf, - int buf_len, - const net::CompletionCallback& callback, - const net::NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + int Write( + net::IOBuffer* buf, + int buf_len, + const net::CompletionCallback& callback, + const net::NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int Connect(const net::CompletionCallback& callback) override;
diff --git a/jingle/glue/fake_ssl_client_socket_unittest.cc b/jingle/glue/fake_ssl_client_socket_unittest.cc index ae4c7a63..e56b0c4 100644 --- a/jingle/glue/fake_ssl_client_socket_unittest.cc +++ b/jingle/glue/fake_ssl_client_socket_unittest.cc
@@ -23,7 +23,7 @@ #include "net/socket/socket_tag.h" #include "net/socket/socket_test_util.h" #include "net/socket/stream_socket.h" -#include "net/traffic_annotation/network_traffic_annotation.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -185,10 +185,9 @@ scoped_refptr<net::IOBuffer> write_buf( new net::StringIOBuffer(kWriteTestData)); - int write_status = - fake_ssl_client_socket.Write(write_buf.get(), - arraysize(kWriteTestData), - test_completion_callback.callback()); + int write_status = fake_ssl_client_socket.Write( + write_buf.get(), arraysize(kWriteTestData), + test_completion_callback.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); ExpectStatus(mode, arraysize(kWriteTestData), write_status, &test_completion_callback); } else {
diff --git a/jingle/glue/proxy_resolving_client_socket.h b/jingle/glue/proxy_resolving_client_socket.h index 6af72f70..d37c4fd 100644 --- a/jingle/glue/proxy_resolving_client_socket.h +++ b/jingle/glue/proxy_resolving_client_socket.h
@@ -57,12 +57,11 @@ int Read(net::IOBuffer* buf, int buf_len, const net::CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. - int Write(net::IOBuffer* buf, - int buf_len, - const net::CompletionCallback& callback, - const net::NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + int Write( + net::IOBuffer* buf, + int buf_len, + const net::CompletionCallback& callback, + const net::NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int Connect(const net::CompletionCallback& callback) override;
diff --git a/media/cast/net/udp_transport.cc b/media/cast/net/udp_transport.cc index 57e3b67..8ed8517 100644 --- a/media/cast/net/udp_transport.cc +++ b/media/cast/net/udp_transport.cc
@@ -258,8 +258,10 @@ // If we called Connect() before we must call Write() instead of // SendTo(). Otherwise on some platforms we might get // ERR_SOCKET_IS_CONNECTED. - result = udp_socket_->Write( - buf.get(), static_cast<int>(packet->data.size()), callback); + // TODO(crbug.com/656607): Add proper annotation. + result = + udp_socket_->Write(buf.get(), static_cast<int>(packet->data.size()), + callback, NO_TRAFFIC_ANNOTATION_BUG_656607); } else if (!IsEmpty(remote_addr_)) { result = udp_socket_->SendTo(buf.get(), static_cast<int>(packet->data.size()),
diff --git a/net/BUILD.gn b/net/BUILD.gn index c59ee4d..e5b35082 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -1045,6 +1045,7 @@ "proxy/multi_threaded_proxy_resolver.h", "proxy/network_delegate_error_observer.cc", "proxy/network_delegate_error_observer.h", + "proxy/pac_js_library.h", "proxy/polling_proxy_config_service.cc", "proxy/polling_proxy_config_service.h", "proxy/proxy_bypass_rules.cc", @@ -1076,7 +1077,6 @@ "proxy/proxy_resolver_factory.h", "proxy/proxy_resolver_mac.cc", "proxy/proxy_resolver_mac.h", - "proxy/proxy_resolver_script.h", "proxy/proxy_resolver_script_data.cc", "proxy/proxy_resolver_script_data.h", "proxy/proxy_resolver_winhttp.cc",
diff --git a/net/proxy/pac_js_library.h b/net/proxy/pac_js_library.h new file mode 100644 index 0000000..a26ea80a --- /dev/null +++ b/net/proxy/pac_js_library.h
@@ -0,0 +1,282 @@ +// Copyright (c) 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_PROXY_PAC_JS_LIBRARY_H_ +#define NET_PROXY_PAC_JS_LIBRARY_H_ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Akhil Arora <akhil.arora@sun.com> + * Tomi Leppikangas <Tomi.Leppikangas@oulu.fi> + * Darin Fisher <darin@meer.net> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +// The following code was formatted from: +// 'mozilla/netwerk/base/src/nsProxyAutoConfig.js' (1.55) +// +// Using the command: +// $ cat nsProxyAutoConfig.js | +// awk '/var pacUtils/,/EOF/' | +// sed -e 's/^\s*$/""/g' | +// sed -e 's/"\s*[+]\s*$/"/g' | +// sed -e 's/"$/" \\/g' | +// sed -e 's/\/(ipaddr);/\/.exec(ipaddr);/g' | +// grep -v '^var pacUtils =' +// +// isPlainHost() was removed. +#define PAC_JS_LIBRARY \ + "function dnsDomainIs(host, domain) {\n" \ + " return (host.length >= domain.length &&\n" \ + " host.substring(host.length - domain.length) == domain);\n" \ + "}\n" \ + "" \ + "function dnsDomainLevels(host) {\n" \ + " return host.split('.').length-1;\n" \ + "}\n" \ + "" \ + "function convert_addr(ipchars) {\n" \ + " var bytes = ipchars.split('.');\n" \ + " var result = ((bytes[0] & 0xff) << 24) |\n" \ + " ((bytes[1] & 0xff) << 16) |\n" \ + " ((bytes[2] & 0xff) << 8) |\n" \ + " (bytes[3] & 0xff);\n" \ + " return result;\n" \ + "}\n" \ + "" \ + "function isInNet(ipaddr, pattern, maskstr) {\n" \ + " var test = " \ + "/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/.exec(ipaddr);\n" \ + " if (test == null) {\n" \ + " ipaddr = dnsResolve(ipaddr);\n" \ + " if (ipaddr == null)\n" \ + " return false;\n" \ + " } else if (test[1] > 255 || test[2] > 255 || \n" \ + " test[3] > 255 || test[4] > 255) {\n" \ + " return false; // not an IP address\n" \ + " }\n" \ + " var host = convert_addr(ipaddr);\n" \ + " var pat = convert_addr(pattern);\n" \ + " var mask = convert_addr(maskstr);\n" \ + " return ((host & mask) == (pat & mask));\n" \ + " \n" \ + "}\n" \ + "" \ + "function isResolvable(host) {\n" \ + " var ip = dnsResolve(host);\n" \ + " return (ip != null);\n" \ + "}\n" \ + "" \ + "function localHostOrDomainIs(host, hostdom) {\n" \ + " return (host == hostdom) ||\n" \ + " (hostdom.lastIndexOf(host + '.', 0) == 0);\n" \ + "}\n" \ + "" \ + "function shExpMatch(url, pattern) {\n" \ + " pattern = pattern.replace(/\\./g, '\\\\.');\n" \ + " pattern = pattern.replace(/\\*/g, '.*');\n" \ + " pattern = pattern.replace(/\\?/g, '.');\n" \ + " var newRe = new RegExp('^'+pattern+'$');\n" \ + " return newRe.test(url);\n" \ + "}\n" \ + "" \ + "var wdays = {SUN: 0, MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6};\n" \ + "" \ + "var months = {JAN: 0, FEB: 1, MAR: 2, APR: 3, MAY: 4, JUN: 5, JUL: 6, " \ + "AUG: 7, SEP: 8, OCT: 9, NOV: 10, DEC: 11};\n" \ + "" \ + "function weekdayRange() {\n" \ + " function getDay(weekday) {\n" \ + " if (weekday in wdays) {\n" \ + " return wdays[weekday];\n" \ + " }\n" \ + " return -1;\n" \ + " }\n" \ + " var date = new Date();\n" \ + " var argc = arguments.length;\n" \ + " var wday;\n" \ + " if (argc < 1)\n" \ + " return false;\n" \ + " if (arguments[argc - 1] == 'GMT') {\n" \ + " argc--;\n" \ + " wday = date.getUTCDay();\n" \ + " } else {\n" \ + " wday = date.getDay();\n" \ + " }\n" \ + " var wd1 = getDay(arguments[0]);\n" \ + " var wd2 = (argc == 2) ? getDay(arguments[1]) : wd1;\n" \ + " return (wd1 == -1 || wd2 == -1) ? false\n" \ + " : (wd1 <= wday && wday <= wd2);\n" \ + "}\n" \ + "" \ + "function dateRange() {\n" \ + " function getMonth(name) {\n" \ + " if (name in months) {\n" \ + " return months[name];\n" \ + " }\n" \ + " return -1;\n" \ + " }\n" \ + " var date = new Date();\n" \ + " var argc = arguments.length;\n" \ + " if (argc < 1) {\n" \ + " return false;\n" \ + " }\n" \ + " var isGMT = (arguments[argc - 1] == 'GMT');\n" \ + "\n" \ + " if (isGMT) {\n" \ + " argc--;\n" \ + " }\n" \ + " // function will work even without explict handling of this case\n" \ + " if (argc == 1) {\n" \ + " var tmp = parseInt(arguments[0]);\n" \ + " if (isNaN(tmp)) {\n" \ + " return ((isGMT ? date.getUTCMonth() : date.getMonth()) ==\n" \ + "getMonth(arguments[0]));\n" \ + " } else if (tmp < 32) {\n" \ + " return ((isGMT ? date.getUTCDate() : date.getDate()) == " \ + "tmp);\n" \ + " } else { \n" \ + " return ((isGMT ? date.getUTCFullYear() : date.getFullYear()) " \ + "==\n" \ + "tmp);\n" \ + " }\n" \ + " }\n" \ + " var year = date.getFullYear();\n" \ + " var date1, date2;\n" \ + " date1 = new Date(year, 0, 1, 0, 0, 0);\n" \ + " date2 = new Date(year, 11, 31, 23, 59, 59);\n" \ + " var adjustMonth = false;\n" \ + " for (var i = 0; i < (argc >> 1); i++) {\n" \ + " var tmp = parseInt(arguments[i]);\n" \ + " if (isNaN(tmp)) {\n" \ + " var mon = getMonth(arguments[i]);\n" \ + " date1.setMonth(mon);\n" \ + " } else if (tmp < 32) {\n" \ + " adjustMonth = (argc <= 2);\n" \ + " date1.setDate(tmp);\n" \ + " } else {\n" \ + " date1.setFullYear(tmp);\n" \ + " }\n" \ + " }\n" \ + " for (var i = (argc >> 1); i < argc; i++) {\n" \ + " var tmp = parseInt(arguments[i]);\n" \ + " if (isNaN(tmp)) {\n" \ + " var mon = getMonth(arguments[i]);\n" \ + " date2.setMonth(mon);\n" \ + " } else if (tmp < 32) {\n" \ + " date2.setDate(tmp);\n" \ + " } else {\n" \ + " date2.setFullYear(tmp);\n" \ + " }\n" \ + " }\n" \ + " if (adjustMonth) {\n" \ + " date1.setMonth(date.getMonth());\n" \ + " date2.setMonth(date.getMonth());\n" \ + " }\n" \ + " if (isGMT) {\n" \ + " var tmp = date;\n" \ + " tmp.setFullYear(date.getUTCFullYear());\n" \ + " tmp.setMonth(date.getUTCMonth());\n" \ + " tmp.setDate(date.getUTCDate());\n" \ + " tmp.setHours(date.getUTCHours());\n" \ + " tmp.setMinutes(date.getUTCMinutes());\n" \ + " tmp.setSeconds(date.getUTCSeconds());\n" \ + " date = tmp;\n" \ + " }\n" \ + " return ((date1 <= date) && (date <= date2));\n" \ + "}\n" \ + "" \ + "function timeRange() {\n" \ + " var argc = arguments.length;\n" \ + " var date = new Date();\n" \ + " var isGMT= false;\n" \ + "\n" \ + " if (argc < 1) {\n" \ + " return false;\n" \ + " }\n" \ + " if (arguments[argc - 1] == 'GMT') {\n" \ + " isGMT = true;\n" \ + " argc--;\n" \ + " }\n" \ + "\n" \ + " var hour = isGMT ? date.getUTCHours() : date.getHours();\n" \ + " var date1, date2;\n" \ + " date1 = new Date();\n" \ + " date2 = new Date();\n" \ + "\n" \ + " if (argc == 1) {\n" \ + " return (hour == arguments[0]);\n" \ + " } else if (argc == 2) {\n" \ + " return ((arguments[0] <= hour) && (hour <= arguments[1]));\n" \ + " } else {\n" \ + " switch (argc) {\n" \ + " case 6:\n" \ + " date1.setSeconds(arguments[2]);\n" \ + " date2.setSeconds(arguments[5]);\n" \ + " case 4:\n" \ + " var middle = argc >> 1;\n" \ + " date1.setHours(arguments[0]);\n" \ + " date1.setMinutes(arguments[1]);\n" \ + " date2.setHours(arguments[middle]);\n" \ + " date2.setMinutes(arguments[middle + 1]);\n" \ + " if (middle == 2) {\n" \ + " date2.setSeconds(59);\n" \ + " }\n" \ + " break;\n" \ + " default:\n" \ + " throw 'timeRange: bad number of arguments'\n" \ + " }\n" \ + " }\n" \ + "\n" \ + " if (isGMT) {\n" \ + " date.setFullYear(date.getUTCFullYear());\n" \ + " date.setMonth(date.getUTCMonth());\n" \ + " date.setDate(date.getUTCDate());\n" \ + " date.setHours(date.getUTCHours());\n" \ + " date.setMinutes(date.getUTCMinutes());\n" \ + " date.setSeconds(date.getUTCSeconds());\n" \ + " }\n" \ + " return ((date1 <= date) && (date <= date2));\n" \ + "}\n" + +// This is a Microsoft extension to PAC for IPv6, see: +// http://blogs.msdn.com/b/wndp/archive/2006/07/13/ipv6-pac-extensions-v0-9.aspx +#define PAC_JS_LIBRARY_EX \ + "function isResolvableEx(host) {\n" \ + " var ipList = dnsResolveEx(host);\n" \ + " return (ipList != '');\n" \ + "}\n" + +#endif // NET_PROXY_PAC_JS_LIBRARY_H_
diff --git a/net/proxy/proxy_resolver_script.h b/net/proxy/proxy_resolver_script.h deleted file mode 100644 index e838bed..0000000 --- a/net/proxy/proxy_resolver_script.h +++ /dev/null
@@ -1,278 +0,0 @@ -// Copyright (c) 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef NET_PROXY_PROXY_RESOLVER_SCRIPT_H_ -#define NET_PROXY_PROXY_RESOLVER_SCRIPT_H_ - -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Akhil Arora <akhil.arora@sun.com> - * Tomi Leppikangas <Tomi.Leppikangas@oulu.fi> - * Darin Fisher <darin@meer.net> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// The following code was formatted from: -// 'mozilla/netwerk/base/src/nsProxyAutoConfig.js' (1.55) -// -// Using the command: -// $ cat nsProxyAutoConfig.js | -// awk '/var pacUtils/,/EOF/' | -// sed -e 's/^\s*$/""/g' | -// sed -e 's/"\s*[+]\s*$/"/g' | -// sed -e 's/"$/" \\/g' | -// sed -e 's/\/(ipaddr);/\/.exec(ipaddr);/g' | -// grep -v '^var pacUtils =' -// -// isPlainHost() was removed. -#define PROXY_RESOLVER_SCRIPT \ - "function dnsDomainIs(host, domain) {\n" \ - " return (host.length >= domain.length &&\n" \ - " host.substring(host.length - domain.length) == domain);\n" \ - "}\n" \ - "" \ - "function dnsDomainLevels(host) {\n" \ - " return host.split('.').length-1;\n" \ - "}\n" \ - "" \ - "function convert_addr(ipchars) {\n" \ - " var bytes = ipchars.split('.');\n" \ - " var result = ((bytes[0] & 0xff) << 24) |\n" \ - " ((bytes[1] & 0xff) << 16) |\n" \ - " ((bytes[2] & 0xff) << 8) |\n" \ - " (bytes[3] & 0xff);\n" \ - " return result;\n" \ - "}\n" \ - "" \ - "function isInNet(ipaddr, pattern, maskstr) {\n" \ - " var test = /^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/.exec(ipaddr);\n" \ - " if (test == null) {\n" \ - " ipaddr = dnsResolve(ipaddr);\n" \ - " if (ipaddr == null)\n" \ - " return false;\n" \ - " } else if (test[1] > 255 || test[2] > 255 || \n" \ - " test[3] > 255 || test[4] > 255) {\n" \ - " return false; // not an IP address\n" \ - " }\n" \ - " var host = convert_addr(ipaddr);\n" \ - " var pat = convert_addr(pattern);\n" \ - " var mask = convert_addr(maskstr);\n" \ - " return ((host & mask) == (pat & mask));\n" \ - " \n" \ - "}\n" \ - "" \ - "function isResolvable(host) {\n" \ - " var ip = dnsResolve(host);\n" \ - " return (ip != null);\n" \ - "}\n" \ - "" \ - "function localHostOrDomainIs(host, hostdom) {\n" \ - " return (host == hostdom) ||\n" \ - " (hostdom.lastIndexOf(host + '.', 0) == 0);\n" \ - "}\n" \ - "" \ - "function shExpMatch(url, pattern) {\n" \ - " pattern = pattern.replace(/\\./g, '\\\\.');\n" \ - " pattern = pattern.replace(/\\*/g, '.*');\n" \ - " pattern = pattern.replace(/\\?/g, '.');\n" \ - " var newRe = new RegExp('^'+pattern+'$');\n" \ - " return newRe.test(url);\n" \ - "}\n" \ - "" \ - "var wdays = {SUN: 0, MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6};\n" \ - "" \ - "var months = {JAN: 0, FEB: 1, MAR: 2, APR: 3, MAY: 4, JUN: 5, JUL: 6, AUG: 7, SEP: 8, OCT: 9, NOV: 10, DEC: 11};\n" \ - "" \ - "function weekdayRange() {\n" \ - " function getDay(weekday) {\n" \ - " if (weekday in wdays) {\n" \ - " return wdays[weekday];\n" \ - " }\n" \ - " return -1;\n" \ - " }\n" \ - " var date = new Date();\n" \ - " var argc = arguments.length;\n" \ - " var wday;\n" \ - " if (argc < 1)\n" \ - " return false;\n" \ - " if (arguments[argc - 1] == 'GMT') {\n" \ - " argc--;\n" \ - " wday = date.getUTCDay();\n" \ - " } else {\n" \ - " wday = date.getDay();\n" \ - " }\n" \ - " var wd1 = getDay(arguments[0]);\n" \ - " var wd2 = (argc == 2) ? getDay(arguments[1]) : wd1;\n" \ - " return (wd1 == -1 || wd2 == -1) ? false\n" \ - " : (wd1 <= wday && wday <= wd2);\n" \ - "}\n" \ - "" \ - "function dateRange() {\n" \ - " function getMonth(name) {\n" \ - " if (name in months) {\n" \ - " return months[name];\n" \ - " }\n" \ - " return -1;\n" \ - " }\n" \ - " var date = new Date();\n" \ - " var argc = arguments.length;\n" \ - " if (argc < 1) {\n" \ - " return false;\n" \ - " }\n" \ - " var isGMT = (arguments[argc - 1] == 'GMT');\n" \ - "\n" \ - " if (isGMT) {\n" \ - " argc--;\n" \ - " }\n" \ - " // function will work even without explict handling of this case\n" \ - " if (argc == 1) {\n" \ - " var tmp = parseInt(arguments[0]);\n" \ - " if (isNaN(tmp)) {\n" \ - " return ((isGMT ? date.getUTCMonth() : date.getMonth()) ==\n" \ - "getMonth(arguments[0]));\n" \ - " } else if (tmp < 32) {\n" \ - " return ((isGMT ? date.getUTCDate() : date.getDate()) == tmp);\n" \ - " } else { \n" \ - " return ((isGMT ? date.getUTCFullYear() : date.getFullYear()) ==\n" \ - "tmp);\n" \ - " }\n" \ - " }\n" \ - " var year = date.getFullYear();\n" \ - " var date1, date2;\n" \ - " date1 = new Date(year, 0, 1, 0, 0, 0);\n" \ - " date2 = new Date(year, 11, 31, 23, 59, 59);\n" \ - " var adjustMonth = false;\n" \ - " for (var i = 0; i < (argc >> 1); i++) {\n" \ - " var tmp = parseInt(arguments[i]);\n" \ - " if (isNaN(tmp)) {\n" \ - " var mon = getMonth(arguments[i]);\n" \ - " date1.setMonth(mon);\n" \ - " } else if (tmp < 32) {\n" \ - " adjustMonth = (argc <= 2);\n" \ - " date1.setDate(tmp);\n" \ - " } else {\n" \ - " date1.setFullYear(tmp);\n" \ - " }\n" \ - " }\n" \ - " for (var i = (argc >> 1); i < argc; i++) {\n" \ - " var tmp = parseInt(arguments[i]);\n" \ - " if (isNaN(tmp)) {\n" \ - " var mon = getMonth(arguments[i]);\n" \ - " date2.setMonth(mon);\n" \ - " } else if (tmp < 32) {\n" \ - " date2.setDate(tmp);\n" \ - " } else {\n" \ - " date2.setFullYear(tmp);\n" \ - " }\n" \ - " }\n" \ - " if (adjustMonth) {\n" \ - " date1.setMonth(date.getMonth());\n" \ - " date2.setMonth(date.getMonth());\n" \ - " }\n" \ - " if (isGMT) {\n" \ - " var tmp = date;\n" \ - " tmp.setFullYear(date.getUTCFullYear());\n" \ - " tmp.setMonth(date.getUTCMonth());\n" \ - " tmp.setDate(date.getUTCDate());\n" \ - " tmp.setHours(date.getUTCHours());\n" \ - " tmp.setMinutes(date.getUTCMinutes());\n" \ - " tmp.setSeconds(date.getUTCSeconds());\n" \ - " date = tmp;\n" \ - " }\n" \ - " return ((date1 <= date) && (date <= date2));\n" \ - "}\n" \ - "" \ - "function timeRange() {\n" \ - " var argc = arguments.length;\n" \ - " var date = new Date();\n" \ - " var isGMT= false;\n" \ - "\n" \ - " if (argc < 1) {\n" \ - " return false;\n" \ - " }\n" \ - " if (arguments[argc - 1] == 'GMT') {\n" \ - " isGMT = true;\n" \ - " argc--;\n" \ - " }\n" \ - "\n" \ - " var hour = isGMT ? date.getUTCHours() : date.getHours();\n" \ - " var date1, date2;\n" \ - " date1 = new Date();\n" \ - " date2 = new Date();\n" \ - "\n" \ - " if (argc == 1) {\n" \ - " return (hour == arguments[0]);\n" \ - " } else if (argc == 2) {\n" \ - " return ((arguments[0] <= hour) && (hour <= arguments[1]));\n" \ - " } else {\n" \ - " switch (argc) {\n" \ - " case 6:\n" \ - " date1.setSeconds(arguments[2]);\n" \ - " date2.setSeconds(arguments[5]);\n" \ - " case 4:\n" \ - " var middle = argc >> 1;\n" \ - " date1.setHours(arguments[0]);\n" \ - " date1.setMinutes(arguments[1]);\n" \ - " date2.setHours(arguments[middle]);\n" \ - " date2.setMinutes(arguments[middle + 1]);\n" \ - " if (middle == 2) {\n" \ - " date2.setSeconds(59);\n" \ - " }\n" \ - " break;\n" \ - " default:\n" \ - " throw 'timeRange: bad number of arguments'\n" \ - " }\n" \ - " }\n" \ - "\n" \ - " if (isGMT) {\n" \ - " date.setFullYear(date.getUTCFullYear());\n" \ - " date.setMonth(date.getUTCMonth());\n" \ - " date.setDate(date.getUTCDate());\n" \ - " date.setHours(date.getUTCHours());\n" \ - " date.setMinutes(date.getUTCMinutes());\n" \ - " date.setSeconds(date.getUTCSeconds());\n" \ - " }\n" \ - " return ((date1 <= date) && (date <= date2));\n" \ - "}\n" - -// This is a Microsoft extension to PAC for IPv6, see: -// http://blogs.msdn.com/b/wndp/archive/2006/07/13/ipv6-pac-extensions-v0-9.aspx -#define PROXY_RESOLVER_SCRIPT_EX \ - "function isResolvableEx(host) {\n" \ - " var ipList = dnsResolveEx(host);\n" \ - " return (ipList != '');\n" \ - "}\n" - -#endif // NET_PROXY_PROXY_RESOLVER_SCRIPT_H_
diff --git a/net/proxy/proxy_resolver_v8.cc b/net/proxy/proxy_resolver_v8.cc index 88c9aa4..91dafc0 100644 --- a/net/proxy/proxy_resolver_v8.cc +++ b/net/proxy/proxy_resolver_v8.cc
@@ -24,8 +24,8 @@ #include "gin/v8_initializer.h" #include "net/base/ip_address.h" #include "net/base/net_errors.h" +#include "net/proxy/pac_js_library.h" #include "net/proxy/proxy_info.h" -#include "net/proxy/proxy_resolver_script.h" #include "net/proxy/proxy_resolver_script_data.h" #include "url/gurl.h" #include "url/url_canon.h" @@ -34,8 +34,7 @@ // Notes on the javascript environment: // // For the majority of the PAC utility functions, we use the same code -// as Firefox. See the javascript library that proxy_resolver_scipt.h -// pulls in. +// as Firefox. See the javascript library that pac_js_library.h pulls in. // // In addition, we implement a subset of Microsoft's extensions to PAC. // - myIpAddressEx() @@ -573,10 +572,7 @@ // (This script should never fail, as it is a string literal!) // Note that the two string literals are concatenated. int rv = RunScript( - ASCIILiteralToV8String( - isolate_, - PROXY_RESOLVER_SCRIPT - PROXY_RESOLVER_SCRIPT_EX), + ASCIILiteralToV8String(isolate_, PAC_JS_LIBRARY PAC_JS_LIBRARY_EX), kPacUtilityResourceName); if (rv != OK) { NOTREACHED();
diff --git a/net/quic/chromium/quic_proxy_client_socket.h b/net/quic/chromium/quic_proxy_client_socket.h index c38250a..90b0f2bf 100644 --- a/net/quic/chromium/quic_proxy_client_socket.h +++ b/net/quic/chromium/quic_proxy_client_socket.h
@@ -68,12 +68,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int GetPeerAddress(IPEndPoint* address) const override;
diff --git a/net/quic/chromium/quic_proxy_client_socket_unittest.cc b/net/quic/chromium/quic_proxy_client_socket_unittest.cc index 3169883..fa49500 100644 --- a/net/quic/chromium/quic_proxy_client_socket_unittest.cc +++ b/net/quic/chromium/quic_proxy_client_socket_unittest.cc
@@ -36,6 +36,7 @@ #include "net/socket/socket_test_util.h" #include "net/test/cert_test_util.h" #include "net/test/test_data_directory.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -432,13 +433,15 @@ scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(len)); memcpy(buf->data(), data, len); EXPECT_EQ(rv, - sock_->Write(buf.get(), buf->size(), write_callback_.callback())); + sock_->Write(buf.get(), buf->size(), write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); } void AssertSyncWriteSucceeds(const char* data, int len) { scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(len)); memcpy(buf->data(), data, len); - EXPECT_THAT(sock_->Write(buf.get(), buf->size(), CompletionCallback()), + EXPECT_THAT(sock_->Write(buf.get(), buf->size(), CompletionCallback(), + TRAFFIC_ANNOTATION_FOR_TESTS), IsOk()); }
diff --git a/net/socket/fuzzed_datagram_client_socket.cc b/net/socket/fuzzed_datagram_client_socket.cc index 44f5490..65043f50 100644 --- a/net/socket/fuzzed_datagram_client_socket.cc +++ b/net/socket/fuzzed_datagram_client_socket.cc
@@ -137,12 +137,10 @@ IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { CHECK(!callback.is_null()); CHECK(!write_pending_); - // TODO(crbug.com/656607): Handle traffic annotation. - // Normally this is allowed, but code really shouldn't be doing this - if it // is, it's best to figure out why, and fix it. CHECK(connected_);
diff --git a/net/socket/fuzzed_datagram_client_socket.h b/net/socket/fuzzed_datagram_client_socket.h index defa6ae..6d19562 100644 --- a/net/socket/fuzzed_datagram_client_socket.h +++ b/net/socket/fuzzed_datagram_client_socket.h
@@ -52,12 +52,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int SetDoNotFragment() override;
diff --git a/net/socket/fuzzed_socket.cc b/net/socket/fuzzed_socket.cc index def156b9..be62fff 100644 --- a/net/socket/fuzzed_socket.cc +++ b/net/socket/fuzzed_socket.cc
@@ -90,15 +90,14 @@ return ERR_IO_PENDING; } -int FuzzedSocket::Write(IOBuffer* buf, - int buf_len, - const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { +int FuzzedSocket::Write( + IOBuffer* buf, + int buf_len, + const CompletionCallback& callback, + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { DCHECK(!connect_pending_); DCHECK(!write_pending_); - // TODO(crbug.com/656607): Handle traffic annotation. - bool sync; int result;
diff --git a/net/socket/fuzzed_socket.h b/net/socket/fuzzed_socket.h index a283e7c08..3340e43 100644 --- a/net/socket/fuzzed_socket.h +++ b/net/socket/fuzzed_socket.h
@@ -62,12 +62,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override;
diff --git a/net/socket/fuzzed_socket_factory.cc b/net/socket/fuzzed_socket_factory.cc index fcdad66..ca158aea 100644 --- a/net/socket/fuzzed_socket_factory.cc +++ b/net/socket/fuzzed_socket_factory.cc
@@ -38,12 +38,10 @@ return ERR_UNEXPECTED; } - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override { + const NetworkTrafficAnnotationTag& traffic_annotation) override { NOTREACHED(); return ERR_UNEXPECTED; }
diff --git a/net/socket/socket.h b/net/socket/socket.h index 87fd9cb..1d0ab92 100644 --- a/net/socket/socket.h +++ b/net/socket/socket.h
@@ -81,15 +81,6 @@ // Note: changing this value can affect the TCP window size on some platforms. // Returns a net error code. virtual int SetSendBufferSize(int32_t size) = 0; - - private: - void SetTrafficAnnotation( - const NetworkTrafficAnnotationTag& traffic_annotation) { - traffic_annotation_ = - MutableNetworkTrafficAnnotationTag(traffic_annotation); - } - - MutableNetworkTrafficAnnotationTag traffic_annotation_; }; } // namespace net
diff --git a/net/socket/socket_posix.cc b/net/socket/socket_posix.cc index 9661928f..91ce4e82 100644 --- a/net/socket/socket_posix.cc +++ b/net/socket/socket_posix.cc
@@ -347,10 +347,11 @@ return ERR_IO_PENDING; } -int SocketPosix::Write(IOBuffer* buf, - int buf_len, - const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { +int SocketPosix::Write( + IOBuffer* buf, + int buf_len, + const CompletionCallback& callback, + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK_NE(kInvalidSocket, socket_fd_); DCHECK(!waiting_connect_); @@ -359,8 +360,6 @@ DCHECK(!callback.is_null()); DCHECK_LT(0, buf_len); - // TODO(crbug.com/656607): Handle traffic annotation. - int rv = DoWrite(buf, buf_len); if (rv == ERR_IO_PENDING) rv = WaitForWrite(buf, buf_len, callback);
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index 637cdf9d..88344f0 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc
@@ -928,12 +928,10 @@ IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { DCHECK(buf); DCHECK_GT(buf_len, 0); - // TODO(crbug.com/656607): Handle traffic annotation. - if (!connected_ || !data_) return ERR_UNEXPECTED; @@ -1356,12 +1354,10 @@ IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { DCHECK(buf); DCHECK_GT(buf_len, 0); - // TODO(crbug.com/656607): Handle traffic annotation. - if (!connected_ || !data_) return ERR_UNEXPECTED;
diff --git a/net/socket/socks5_client_socket.h b/net/socket/socks5_client_socket.h index c440aa27..8d3f34f5 100644 --- a/net/socket/socks5_client_socket.h +++ b/net/socket/socks5_client_socket.h
@@ -67,12 +67,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override;
diff --git a/net/socket/socks5_client_socket_unittest.cc b/net/socket/socks5_client_socket_unittest.cc index bef8a94..b8807287 100644 --- a/net/socket/socks5_client_socket_unittest.cc +++ b/net/socket/socks5_client_socket_unittest.cc
@@ -24,6 +24,7 @@ #include "net/socket/socket_test_util.h" #include "net/socket/tcp_client_socket.h" #include "net/test/gtest_util.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -173,8 +174,8 @@ scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size())); memcpy(buffer->data(), payload_write.data(), payload_write.size()); - rv = user_sock_->Write( - buffer.get(), payload_write.size(), callback_.callback()); + rv = user_sock_->Write(buffer.get(), payload_write.size(), + callback_.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); rv = callback_.WaitForResult(); EXPECT_EQ(static_cast<int>(payload_write.size()), rv);
diff --git a/net/socket/socks_client_socket.h b/net/socket/socks_client_socket.h index dcef711..0061543 100644 --- a/net/socket/socks_client_socket.h +++ b/net/socket/socks_client_socket.h
@@ -64,12 +64,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override;
diff --git a/net/socket/ssl_client_socket_impl.h b/net/socket/ssl_client_socket_impl.h index 33a6054..40b5d97 100644 --- a/net/socket/ssl_client_socket_impl.h +++ b/net/socket/ssl_client_socket_impl.h
@@ -130,12 +130,10 @@ int ReadIfReady(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override;
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc index 99c8eaf..19576f439 100644 --- a/net/socket/ssl_client_socket_unittest.cc +++ b/net/socket/ssl_client_socket_unittest.cc
@@ -266,12 +266,10 @@ int ReadIfReady(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; // Sets the next Read() call and all future calls to return |error|. // If there is already a pending asynchronous read, the configured error @@ -347,12 +345,10 @@ int ReadIfReady(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int pending_read_result() const { return pending_read_result_; } IOBuffer* pending_read_buf() const { return pending_read_buf_.get(); }
diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc index 54bc3a5..987768ca 100644 --- a/net/socket/ssl_server_socket_unittest.cc +++ b/net/socket/ssl_server_socket_unittest.cc
@@ -66,7 +66,7 @@ #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" -#include "net/traffic_annotation/network_traffic_annotation.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -120,12 +120,10 @@ return PropagateData(buf, buf_len); } - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) { + const NetworkTrafficAnnotationTag& traffic_annotation) { DCHECK(write_callback_.is_null()); if (closed_) { if (write_called_after_close_) @@ -238,15 +236,14 @@ return incoming_->Read(buf, buf_len, callback); } - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override { + const NetworkTrafficAnnotationTag& traffic_annotation) override { // Write random number of bytes. buf_len = rand() % buf_len + 1; - return outgoing_->Write(buf, buf_len, callback); + return outgoing_->Write(buf, buf_len, callback, + TRAFFIC_ANNOTATION_FOR_TESTS); } int SetReceiveBufferSize(int32_t size) override { return OK; } @@ -328,7 +325,8 @@ // Write then read. int written = - server.Write(write_buf.get(), kTestDataSize, CompletionCallback()); + server.Write(write_buf.get(), kTestDataSize, CompletionCallback(), + TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_GT(written, 0); EXPECT_LE(written, kTestDataSize); @@ -342,7 +340,8 @@ EXPECT_EQ(ERR_IO_PENDING, server.Read(read_buf.get(), kReadBufSize, callback.callback())); - written = client.Write(write_buf.get(), kTestDataSize, CompletionCallback()); + written = client.Write(write_buf.get(), kTestDataSize, CompletionCallback(), + TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_GT(written, 0); EXPECT_LE(written, kTestDataSize);
diff --git a/net/socket/tcp_socket_win.cc b/net/socket/tcp_socket_win.cc index a4efc03..4ecab0b60 100644 --- a/net/socket/tcp_socket_win.cc +++ b/net/socket/tcp_socket_win.cc
@@ -518,11 +518,11 @@ return ERR_IO_PENDING; } -int TCPSocketWin::Write(IOBuffer* buf, - int buf_len, - const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { - // TODO(crbug.com/656607): Handle traffic annotation. +int TCPSocketWin::Write( + IOBuffer* buf, + int buf_len, + const CompletionCallback& callback, + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_NE(socket_, INVALID_SOCKET); DCHECK(!waiting_write_);
diff --git a/net/socket/tcp_socket_win.h b/net/socket/tcp_socket_win.h index 5ea6305..1cb2675a 100644 --- a/net/socket/tcp_socket_win.h +++ b/net/socket/tcp_socket_win.h
@@ -70,12 +70,10 @@ int ReadIfReady(IOBuffer* buf, int buf_len, const CompletionCallback& callback); - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607); + const NetworkTrafficAnnotationTag& traffic_annotation); int GetLocalAddress(IPEndPoint* address) const; int GetPeerAddress(IPEndPoint* address) const;
diff --git a/net/socket/udp_client_socket.h b/net/socket/udp_client_socket.h index f631c6d6..986898c 100644 --- a/net/socket/udp_client_socket.h +++ b/net/socket/udp_client_socket.h
@@ -38,12 +38,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; void Close() override; int GetPeerAddress(IPEndPoint* address) const override; int GetLocalAddress(IPEndPoint* address) const override;
diff --git a/net/socket/udp_socket_perftest.cc b/net/socket/udp_socket_perftest.cc index 190e157..25f0ba3 100644 --- a/net/socket/udp_socket_perftest.cc +++ b/net/socket/udp_socket_perftest.cc
@@ -17,6 +17,7 @@ #include "net/socket/udp_socket.h" #include "net/test/gtest_util.h" #include "net/test/net_test_suite.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -75,7 +76,8 @@ socket->Write(io_buffer.get(), io_buffer->size(), base::Bind(&UDPSocketPerfTest::DoneWritePacketsToSocket, weak_factory_.GetWeakPtr(), socket, - num_of_packets - 1, done_callback)); + num_of_packets - 1, done_callback), + TRAFFIC_ANNOTATION_FOR_TESTS); if (rv == ERR_IO_PENDING) break; --num_of_packets;
diff --git a/net/socket/udp_socket_unittest.cc b/net/socket/udp_socket_unittest.cc index 1f16055..82423090 100644 --- a/net/socket/udp_socket_unittest.cc +++ b/net/socket/udp_socket_unittest.cc
@@ -29,6 +29,7 @@ #include "net/socket/udp_server_socket.h" #include "net/test/gtest_util.h" #include "net/test/net_test_suite.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -98,8 +99,8 @@ int WriteSocket(UDPClientSocket* socket, const std::string& msg) { scoped_refptr<StringIOBuffer> io_buffer(new StringIOBuffer(msg)); TestCompletionCallback callback; - int rv = - socket->Write(io_buffer.get(), io_buffer->size(), callback.callback()); + int rv = socket->Write(io_buffer.get(), io_buffer->size(), + callback.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); return callback.GetResult(rv); }
diff --git a/net/socket/udp_socket_win.cc b/net/socket/udp_socket_win.cc index 99b73ab..7790d6a 100644 --- a/net/socket/udp_socket_win.cc +++ b/net/socket/udp_socket_win.cc
@@ -407,11 +407,11 @@ return ERR_IO_PENDING; } -int UDPSocketWin::Write(IOBuffer* buf, - int buf_len, - const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation) { - // TODO(crbug.com/656607): Handle traffic annotation. +int UDPSocketWin::Write( + IOBuffer* buf, + int buf_len, + const CompletionCallback& callback, + const NetworkTrafficAnnotationTag& /* traffic_annotation */) { return SendToOrWrite(buf, buf_len, remote_address_.get(), callback); }
diff --git a/net/socket/udp_socket_win.h b/net/socket/udp_socket_win.h index 8f7279ca..71094d4 100644 --- a/net/socket/udp_socket_win.h +++ b/net/socket/udp_socket_win.h
@@ -89,12 +89,10 @@ // Writes to the socket. // Only usable from the client-side of a UDP socket, after the socket // has been connected. - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607); + const NetworkTrafficAnnotationTag& traffic_annotation); // Reads from a socket and receive sender address information. // |buf| is the buffer to read data into.
diff --git a/net/socket/unix_domain_client_socket_posix.h b/net/socket/unix_domain_client_socket_posix.h index 9b8cf426..dbc513c 100644 --- a/net/socket/unix_domain_client_socket_posix.h +++ b/net/socket/unix_domain_client_socket_posix.h
@@ -66,12 +66,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override;
diff --git a/net/spdy/chromium/spdy_proxy_client_socket.h b/net/spdy/chromium/spdy_proxy_client_socket.h index 3f26223..d95589dc 100644 --- a/net/spdy/chromium/spdy_proxy_client_socket.h +++ b/net/spdy/chromium/spdy_proxy_client_socket.h
@@ -85,12 +85,10 @@ int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) override; - // TODO(crbug.com/656607): Remove default value. int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback, - const NetworkTrafficAnnotationTag& traffic_annotation = - NO_TRAFFIC_ANNOTATION_BUG_656607) override; + const NetworkTrafficAnnotationTag& traffic_annotation) override; int SetReceiveBufferSize(int32_t size) override; int SetSendBufferSize(int32_t size) override; int GetPeerAddress(IPEndPoint* address) const override;
diff --git a/net/spdy/chromium/spdy_proxy_client_socket_unittest.cc b/net/spdy/chromium/spdy_proxy_client_socket_unittest.cc index 63c8d10..e8eccf49 100644 --- a/net/spdy/chromium/spdy_proxy_client_socket_unittest.cc +++ b/net/spdy/chromium/spdy_proxy_client_socket_unittest.cc
@@ -33,6 +33,7 @@ #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -286,8 +287,8 @@ int len, int rv) { scoped_refptr<IOBufferWithSize> buf(CreateBuffer(data, len)); - EXPECT_EQ(rv, - sock_->Write(buf.get(), buf->size(), write_callback_.callback())); + EXPECT_EQ(rv, sock_->Write(buf.get(), buf->size(), write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); } void SpdyProxyClientSocketTest::AssertWriteLength(int len) { @@ -590,7 +591,8 @@ big_data.length())); EXPECT_EQ(ERR_IO_PENDING, - sock_->Write(buf.get(), buf->size(), write_callback_.callback())); + sock_->Write(buf.get(), buf->size(), write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); EXPECT_EQ(buf->size(), write_callback_.WaitForResult()); } @@ -1055,7 +1057,8 @@ ResumeAndRun(); scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, - sock_->Write(buf.get(), buf->size(), CompletionCallback())); + sock_->Write(buf.get(), buf->size(), CompletionCallback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); } // Calling Write() on a disconnected socket is an error. @@ -1081,7 +1084,8 @@ scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, - sock_->Write(buf.get(), buf->size(), CompletionCallback())); + sock_->Write(buf.get(), buf->size(), CompletionCallback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); // Let the RST_STREAM write while |rst| is in-scope. base::RunLoop().RunUntilIdle(); @@ -1109,7 +1113,8 @@ scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); EXPECT_EQ(ERR_IO_PENDING, - sock_->Write(buf.get(), buf->size(), write_callback_.callback())); + sock_->Write(buf.get(), buf->size(), write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); // Make sure the write actually starts. base::RunLoop().RunUntilIdle(); @@ -1141,7 +1146,8 @@ scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); EXPECT_EQ(ERR_IO_PENDING, - sock_->Write(buf.get(), buf->size(), write_callback_.callback())); + sock_->Write(buf.get(), buf->size(), write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); sock_->Disconnect(); @@ -1213,10 +1219,9 @@ sock_->Read(read_buf.get(), kLen1, read_callback_.callback())); scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1)); - EXPECT_EQ( - ERR_IO_PENDING, - sock_->Write( - write_buf.get(), write_buf->size(), write_callback_.callback())); + EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf.get(), write_buf->size(), + write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); ResumeAndRun(); @@ -1345,10 +1350,9 @@ sock_->Read(read_buf.get(), kLen1, read_callback.callback())); scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1)); - EXPECT_EQ( - ERR_IO_PENDING, - sock_->Write( - write_buf.get(), write_buf->size(), write_callback_.callback())); + EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf.get(), write_buf->size(), + write_callback_.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); ResumeAndRun();
diff --git a/remoting/host/security_key/security_key_auth_handler_posix_unittest.cc b/remoting/host/security_key/security_key_auth_handler_posix_unittest.cc index 7af8a3a..e8982d6 100644 --- a/remoting/host/security_key/security_key_auth_handler_posix_unittest.cc +++ b/remoting/host/security_key/security_key_auth_handler_posix_unittest.cc
@@ -22,6 +22,7 @@ #include "net/base/test_completion_callback.h" #include "net/socket/socket_posix.h" #include "net/socket/unix_domain_client_socket_posix.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "remoting/host/security_key/security_key_auth_handler.h" #include "remoting/host/security_key/security_key_socket.h" #include "testing/gtest/include/gtest/gtest.h" @@ -125,9 +126,9 @@ net::TestCompletionCallback write_callback; int bytes_written = 0; while (bytes_written < request_len) { - int write_result = client_socket->Write(request_buffer.get(), - request_buffer->BytesRemaining(), - write_callback.callback()); + int write_result = client_socket->Write( + request_buffer.get(), request_buffer->BytesRemaining(), + write_callback.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); write_result = write_callback.GetResult(write_result); ASSERT_GT(write_result, 0); bytes_written += write_result;
diff --git a/remoting/protocol/pseudotcp_adapter.cc b/remoting/protocol/pseudotcp_adapter.cc index 382cc5c4..1b65002 100644 --- a/remoting/protocol/pseudotcp_adapter.cc +++ b/remoting/protocol/pseudotcp_adapter.cc
@@ -159,13 +159,12 @@ const scoped_refptr<net::IOBuffer>& buffer, int buffer_size, const net::CompletionCallback& callback, - const net::NetworkTrafficAnnotationTag& traffic_annotation) { + const net::NetworkTrafficAnnotationTag& /*traffic_annotation*/) { DCHECK(write_callback_.is_null()); // Reference the Core in case a callback deletes the adapter. scoped_refptr<Core> core(this); - // TODO(crbug.com/656607): Handle traffic annotation. int result = pseudo_tcp_.Send(buffer->data(), buffer_size); if (result < 0) { result = net::MapSystemError(pseudo_tcp_.GetError());
diff --git a/services/ui/ws/display_manager.cc b/services/ui/ws/display_manager.cc index 8a9cbe5e..f135b3b 100644 --- a/services/ui/ws/display_manager.cc +++ b/services/ui/ws/display_manager.cc
@@ -96,6 +96,8 @@ bool found_internal_display = false; // Check the mirrors before potentially passing them to a unified display. + DCHECK(window_server_->is_hosting_viz() || mirrors.empty()) + << "The window server only handles mirrors specially when hosting viz."; for (const auto& mirror : mirrors) { if (mirror.id() == display::kInvalidDisplayId) { LOG(ERROR) << "SetDisplayConfiguration passed invalid display id";
diff --git a/services/ui/ws/server_window.cc b/services/ui/ws/server_window.cc index 9da355131..efc68f3 100644 --- a/services/ui/ws/server_window.cc +++ b/services/ui/ws/server_window.cc
@@ -178,6 +178,11 @@ observer.OnWindowHierarchyChanged(child, nullptr, this); } +void ServerWindow::RemoveAllChildren() { + while (!children_.empty()) + Remove(children_[0]); +} + void ServerWindow::Reorder(ServerWindow* relative, mojom::OrderDirection direction) { parent_->children_.erase(
diff --git a/services/ui/ws/server_window.h b/services/ui/ws/server_window.h index 042a9d9..2998481 100644 --- a/services/ui/ws/server_window.h +++ b/services/ui/ws/server_window.h
@@ -86,8 +86,15 @@ return current_local_surface_id_; } + // Add the child to this window. void Add(ServerWindow* child); + + // Removes the child window, but does not delete it. void Remove(ServerWindow* child); + + // Removes all child windows from this window, but does not delete them. + void RemoveAllChildren(); + void Reorder(ServerWindow* relative, mojom::OrderDirection diretion); void StackChildAtBottom(ServerWindow* child); void StackChildAtTop(ServerWindow* child);
diff --git a/services/ui/ws/window_manager_state.cc b/services/ui/ws/window_manager_state.cc index 6de4266..6960a74 100644 --- a/services/ui/ws/window_manager_state.cc +++ b/services/ui/ws/window_manager_state.cc
@@ -296,8 +296,6 @@ return; } } - - NOTREACHED(); } const UserId& WindowManagerState::user_id() const {
diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc index 510efc7..5099571 100644 --- a/services/ui/ws/window_tree.cc +++ b/services/ui/ws/window_tree.cc
@@ -344,6 +344,7 @@ } Display* display = display_manager()->GetDisplayById(display_to_create.id()); + const bool display_already_existed = display != nullptr; if (!display) { // Create a display if the window manager is extending onto a new display. display = display_manager()->AddDisplayForWindowManager( @@ -362,7 +363,7 @@ display->GetWindowManagerDisplayRootForUser( window_manager_state_->user_id()); DCHECK(display_root); - DCHECK(display_root->root()->children().empty()); + display_root->root()->RemoveAllChildren(); // NOTE: this doesn't resize the window in any way. We assume the client takes // care of any modifications it needs to do. @@ -375,6 +376,13 @@ DCHECK(old_parent); window_manager_state_->DeleteWindowManagerDisplayRoot(old_parent); } + if (display_already_existed && + display->platform_display()->GetAcceleratedWidget()) { + // Notify the window manager that the dispay's accelerated widget is already + // available, if the display is being reused for a new window tree host. + window_manager_internal_->WmOnAcceleratedWidgetForDisplay( + display->GetId(), display->platform_display()->GetAcceleratedWidget()); + } return window; }
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index fb010ad..7bd6c10f 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -428,7 +428,7 @@ crbug.com/591099 compositing/squashing/no-squashing-into-fixed-position-that-clips.html [ Failure ] crbug.com/591099 compositing/squashing/opacity-squashed-owner.html [ Failure ] crbug.com/591099 compositing/squashing/repaint-child-of-squashed.html [ Failure ] -crbug.com/591099 compositing/squashing/selection-repaint-with-gaps.html [ Failure ] +crbug.com/591099 compositing/squashing/selection-repaint-with-gaps.html [ Crash Failure ] crbug.com/591099 compositing/squashing/squash-above-fixed-1.html [ Failure ] crbug.com/591099 compositing/squashing/squash-above-fixed-2.html [ Failure ] crbug.com/591099 compositing/squashing/squash-above-fixed-3.html [ Failure ] @@ -2178,15 +2178,15 @@ crbug.com/591099 editing/selection/continuations-without-move-caret-to-boundary.html [ Failure ] crbug.com/591099 editing/selection/designmode-no-caret.html [ Failure ] crbug.com/591099 editing/selection/display-table-text.html [ Failure ] -crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed.html [ Failure ] -crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed.html [ Failure ] -crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl.html [ Failure ] -crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping.html [ Failure ] +crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed.html [ Crash Failure ] +crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed.html [ Crash Failure ] +crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl.html [ Crash Failure ] +crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping.html [ Crash Failure ] crbug.com/591099 editing/selection/double_click_and_modify.html [ Failure Pass ] crbug.com/591099 editing/selection/doubleclick-beside-cr-span.html [ Failure Timeout ] crbug.com/591099 editing/selection/doubleclick-whitespace.html [ Failure Pass ] crbug.com/591099 editing/selection/drag-in-iframe.html [ Failure ] -crbug.com/591099 editing/selection/drag-select-1.html [ Failure ] +crbug.com/591099 editing/selection/drag-select-1.html [ Crash Failure ] crbug.com/591099 editing/selection/drag-selection-nodes.html [ Failure Pass ] crbug.com/591099 editing/selection/drag-to-contenteditable-iframe.html [ Failure ] crbug.com/591099 editing/selection/drag_with_unfocused_selection.html [ Failure ] @@ -2261,11 +2261,11 @@ crbug.com/591099 editing/selection/select-out-of-floated-contenteditable.html [ Failure ] crbug.com/591099 editing/selection/select-out-of-floated-input.html [ Failure ] crbug.com/591099 editing/selection/select-out-of-floated-textarea.html [ Failure ] -crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2.html [ Failure ] -crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-ltr.html [ Failure ] -crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2.html [ Failure ] -crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-rtl.html [ Failure ] -crbug.com/591099 editing/selection/select-text-overflow-ellipsis.html [ Failure ] +crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2.html [ Crash Failure ] +crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-ltr.html [ Crash Failure ] +crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2.html [ Crash Failure ] +crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-rtl.html [ Crash Failure ] +crbug.com/591099 editing/selection/select-text-overflow-ellipsis.html [ Crash Failure ] crbug.com/591099 editing/selection/selectNode.html [ Failure ] crbug.com/591099 editing/selection/selectNodeContents.html [ Failure ] crbug.com/591099 editing/selection/select_all/select_all_overflow_hidden_table.html [ Failure Pass ] @@ -2499,11 +2499,11 @@ crbug.com/591099 external/wpt/css/css-tables/table-model-fixup-2.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-tables/visibility-collapse-rowcol-001.html [ Crash Pass ] crbug.com/591099 external/wpt/css/css-tables/visibility-collapse-rowspan-crash.html [ Crash Pass ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-color-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-left-002.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-right-002.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-left-002.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-right-002.xht [ Crash ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-color-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-left-002.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-right-002.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-left-002.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-right-002.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-002.html [ Failure ] crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-006.html [ Failure ] crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-007.html [ Failure ] @@ -2511,9 +2511,9 @@ crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-010.html [ Failure ] crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-012.html [ Failure ] crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-021.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-filled-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-open-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-shape-001.xht [ Crash ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-filled-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-open-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-shape-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-ui/box-sizing-007.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-ui/box-sizing-008.html [ Failure ] crbug.com/591099 external/wpt/css/css-ui/box-sizing-009.html [ Failure ] @@ -2987,14 +2987,14 @@ crbug.com/591099 fast/block/positioning/abs-inside-inline-rel.html [ Crash ] crbug.com/591099 fast/block/positioning/absolute-appended-to-inline.html [ Failure ] crbug.com/591099 fast/block/positioning/absolute-in-inline-dynamic.html [ Failure ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-ltr-2.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-ltr-3.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-ltr.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-2.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-3.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-short-ltr.html [ Crash ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-short-rtl.html [ Crash ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-ltr-2.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-ltr-3.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-ltr.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-2.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-3.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-short-ltr.html [ Crash Failure ] +crbug.com/591099 fast/block/positioning/absolute-in-inline-short-rtl.html [ Crash Failure ] crbug.com/591099 fast/block/positioning/absolute-with-html-border-quirks.html [ Failure ] crbug.com/591099 fast/block/positioning/abspos-auto-left-and-width-change-parent-margin-left.html [ Failure ] crbug.com/591099 fast/block/positioning/auto-height-with-top-and-bottom.html [ Failure ] @@ -3006,7 +3006,7 @@ crbug.com/591099 fast/block/positioning/child-of-fixed-pos-after-movement.html [ Crash ] crbug.com/591099 fast/block/positioning/fixed-in-abs-height-change.html [ Crash ] crbug.com/591099 fast/block/positioning/fixed-positioning-scrollbar-bug.html [ Failure ] -crbug.com/591099 fast/block/positioning/hiding-inside-relpositioned-inline.html [ Crash ] +crbug.com/591099 fast/block/positioning/hiding-inside-relpositioned-inline.html [ Crash Pass ] crbug.com/591099 fast/block/positioning/hittest-on-relative-positioned-children.html [ Failure ] crbug.com/591099 fast/block/positioning/inline-block-relposition.html [ Failure ] crbug.com/591099 fast/block/positioning/leftmargin-topmargin.html [ Failure ] @@ -3015,7 +3015,7 @@ crbug.com/591099 fast/block/positioning/rel-positioned-inline-changes-width.html [ Crash ] crbug.com/591099 fast/block/positioning/relative-overflow-block.html [ Failure ] crbug.com/591099 fast/block/positioning/relative-overflow-replaced.html [ Failure ] -crbug.com/591099 fast/block/positioning/relative-positioned-inline-container.html [ Crash ] +crbug.com/591099 fast/block/positioning/relative-positioned-inline-container.html [ Crash Pass ] crbug.com/591099 fast/block/positioning/relayout-nested-positioned-elements-crash-2.html [ Failure ] crbug.com/591099 fast/block/positioning/rtl-static-positioning.html [ Failure ] crbug.com/591099 fast/block/positioning/table-cell-static-position.html [ Failure Pass ] @@ -3332,8 +3332,8 @@ crbug.com/591099 fast/css/MarqueeLayoutTest.html [ Failure ] crbug.com/591099 fast/css/ZeroOpacityLayers.html [ Failure ] crbug.com/591099 fast/css/ZeroOpacityLayers2.html [ Failure ] -crbug.com/591099 fast/css/abs-pos-child-inside-rel-pos-inline-001.html [ Crash ] -crbug.com/591099 fast/css/abs-pos-child-inside-rel-pos-inline-offset-001.html [ Crash ] +crbug.com/591099 fast/css/abs-pos-child-inside-rel-pos-inline-001.html [ Crash Failure ] +crbug.com/591099 fast/css/abs-pos-child-inside-rel-pos-inline-offset-001.html [ Crash Failure ] crbug.com/591099 fast/css/absolute-child-with-percent-height-inside-relative-parent.html [ Failure ] crbug.com/591099 fast/css/absolute-poition-in-rtl-parent.html [ Failure ] crbug.com/591099 fast/css/acid2-pixel.html [ Failure ] @@ -3724,7 +3724,7 @@ crbug.com/591099 fast/dom/shadow/shadow-contents-event.html [ Crash ] crbug.com/591099 fast/dom/shadow/shadow-dom-event-dispatching-details-summary.html [ Crash ] crbug.com/591099 fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree.html [ Failure ] -crbug.com/591099 fast/dom/vertical-scrollbar-in-rtl.html [ Failure Pass ] +crbug.com/591099 fast/dom/vertical-scrollbar-in-rtl.html [ Crash Failure Pass ] crbug.com/591099 fast/dom/wrapper-classes.html [ Timeout ] crbug.com/591099 fast/dom/wrapper-context.html [ Failure ] crbug.com/591099 fast/dynamic/001.html [ Failure ] @@ -4344,7 +4344,7 @@ crbug.com/591099 fast/inline/inline-box-background-repeat-y.html [ Failure ] crbug.com/591099 fast/inline/inline-box-background.html [ Failure ] crbug.com/591099 fast/inline/inline-focus-ring-under-absolute-enclosing-relative-div.html [ Failure ] -crbug.com/591099 fast/inline/inline-offsetLeft-relpos.html [ Crash ] +crbug.com/591099 fast/inline/inline-offsetLeft-relpos.html [ Crash Failure ] crbug.com/591099 fast/inline/justify-emphasis-inline-box.html [ Failure ] crbug.com/591099 fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks.html [ Failure ] crbug.com/591099 fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline.html [ Failure ] @@ -5014,7 +5014,7 @@ crbug.com/591099 compositing/overflow/overflow-with-negative-z-index-child.html [ Failure ] crbug.com/714962 compositing/overflow/rtl-overflow.html [ Failure ] crbug.com/591099 compositing/perspective-interest-rect.html [ Failure ] -crbug.com/714962 compositing/squashing/squash-composited-input.html [ Failure ] +crbug.com/714962 compositing/squashing/squash-composited-input.html [ Failure Pass ] crbug.com/714962 compositing/squashing/squash-overflow-hidden-scrolltop.html [ Failure ] crbug.com/591099 compositing/squashing/squashing-does-not-stop-transform-propagation.html [ Crash ] crbug.com/714962 compositing/squashing/universal-accelerated-overflow-scrolling.html [ Failure ] @@ -5123,11 +5123,14 @@ crbug.com/714962 editing/selection/offset-from-point.html [ Failure ] crbug.com/714962 editing/selection/select-from-textfield-outwards.html [ Failure ] crbug.com/714962 editing/selection/select-line-break-with-opposite-directionality.html [ Failure ] +crbug.com/591099 editing/selection/select-out-of-floated-non-editable.html [ Failure ] crbug.com/591099 editing/selection/selection-linebreaks-rtl-writing-modes.html [ Failure ] crbug.com/714962 editing/selection/skip-over-contenteditable.html [ Failure ] +crbug.com/591099 editing/selection/subpixel-positioned-selection.html [ Crash ] crbug.com/714962 editing/selection/table-lineboundary.html [ Failure ] crbug.com/714962 editing/shadow/compare-positions-in-nested-shadow.html [ Failure ] crbug.com/714962 editing/surrounding-text/surrounding-text.html [ Failure ] +crbug.com/591099 editing/text-iterator/first_letter_find_string_crash.html [ Crash Pass ] crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.html [ Pass Timeout ] crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.html [ Pass Timeout ] crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.html [ Pass Timeout ] @@ -5265,6 +5268,7 @@ crbug.com/591099 external/wpt/css/css-multicol/multicol-gap-large-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-multicol/multicol-gap-negative-001.xht [ Failure ] crbug.com/591099 external/wpt/css/css-multicol/multicol-height-001.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-multicol/multicol-height-block-child-001.xht [ Failure ] crbug.com/591099 external/wpt/css/css-multicol/multicol-inherit-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-multicol/multicol-inherit-003.xht [ Failure ] crbug.com/591099 external/wpt/css/css-multicol/multicol-list-item-001.xht [ Failure ] @@ -5357,11 +5361,11 @@ crbug.com/591099 external/wpt/css/css-style-attr/style-attr-urls-001.xht [ Failure ] crbug.com/591099 external/wpt/css/css-style-attr/style-attr-urls-002.xht [ Failure ] crbug.com/714962 external/wpt/css/css-tables/visibility-collapse-colspan-003.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-left-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-right-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-left-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-right-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-string-001.xht [ Crash ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-left-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-above-right-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-left-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-position-below-right-001.xht [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor/text-emphasis-style-string-001.xht [ Crash Failure ] crbug.com/714962 external/wpt/css/css-transforms/matrix/svg-matrix-036.html [ Failure ] crbug.com/714962 external/wpt/css/css-transforms/matrix/svg-matrix-037.html [ Failure ] crbug.com/714962 external/wpt/css/css-transforms/matrix/svg-matrix-038.html [ Failure ] @@ -5413,7 +5417,7 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-039.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-041.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-043.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-045.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-045.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-047.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-049.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-051.xht [ Failure Pass ] @@ -5431,8 +5435,8 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-075.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-077.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-079.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-081.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-083.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-081.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-083.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-085.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-087.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-089.xht [ Failure Pass ] @@ -5444,7 +5448,7 @@ crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-105.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-107.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-109.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-111.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-111.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-113.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-115.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-117.xht [ Failure Pass ] @@ -5453,7 +5457,7 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-123.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-125.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-127.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-129.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-129.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-131.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-133.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-135.xht [ Failure Pass ] @@ -5462,7 +5466,7 @@ crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-141.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-143.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-145.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-147.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-147.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-149.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-151.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-153.xht [ Failure Pass ] @@ -5476,7 +5480,7 @@ crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-169.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-171.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-173.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-175.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-175.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-177.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-179.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-181.xht [ Failure ] @@ -5486,8 +5490,8 @@ crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-189.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-191.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-193.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-195.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-197.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-195.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-197.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-199.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-201.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-203.xht [ Failure ] @@ -5591,7 +5595,7 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-174.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-176.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-178.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-180.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-180.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-182.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-184.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-186.xht [ Failure ] @@ -5691,14 +5695,14 @@ crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-002.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-004.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-006.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-008.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-008.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-010.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-012.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-014.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-016.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-018.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-018.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/text-combine-upright-decorations-001.html [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-003.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-003.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-005.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-011.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-013.xht [ Failure ] @@ -5779,6 +5783,8 @@ crbug.com/591099 external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html [ Timeout ] crbug.com/591099 external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html [ Timeout ] crbug.com/591099 external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html [ Timeout ] +crbug.com/591099 external/wpt/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] +crbug.com/591099 external/wpt/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html [ Failure ] crbug.com/591099 external/wpt/html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-newelements-xhtml.xhtml [ Crash ] crbug.com/591099 external/wpt/html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-newelements.html [ Crash ] crbug.com/591099 external/wpt/html/dom/documents/resource-metadata-management/document-lastModified-01.html [ Pass ] @@ -5843,7 +5849,7 @@ crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-wrap_wrapped.html [ Crash ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-wrap_wrapped.html [ Crash ] crbug.com/714962 fast/backgrounds/root-background-propagation3.html [ Failure ] -crbug.com/714962 fast/backgrounds/selection-background-color.html [ Failure ] +crbug.com/714962 fast/backgrounds/selection-background-color.html [ Failure Pass ] crbug.com/714962 fast/block/basic/015.html [ Failure ] crbug.com/714962 fast/block/basic/016.html [ Failure ] crbug.com/591099 fast/block/block-remove-child-delete-line-box-crash.html [ Crash ] @@ -5882,8 +5888,8 @@ crbug.com/714962 fast/block/margin-collapse/044.html [ Failure ] crbug.com/714962 fast/block/margin-collapse/line-beside-float-complex-margin-collapsing.html [ Failure ] crbug.com/591099 fast/block/percent-height-descendant-not-removed-crash2.html [ Crash ] -crbug.com/591099 fast/block/positioning/052.html [ Crash ] -crbug.com/591099 fast/block/positioning/058.html [ Crash ] +crbug.com/591099 fast/block/positioning/052.html [ Crash Pass ] +crbug.com/591099 fast/block/positioning/058.html [ Crash Pass ] crbug.com/591099 fast/block/positioning/abspositioned-object-under-split-relpositioned-inline-crash.html [ Crash ] crbug.com/714962 fast/block/positioning/auto/006.html [ Failure Pass ] crbug.com/714962 fast/block/positioning/auto/vertical-lr/006.html [ Failure Pass ] @@ -5898,7 +5904,7 @@ crbug.com/591099 fast/block/positioning/removing-inside-relpositioned-inline-crash.html [ Crash ] crbug.com/714962 fast/borders/block-mask-overlay-image.html [ Failure ] crbug.com/714962 fast/borders/border-image-fill-no-border.html [ Failure Pass ] -crbug.com/591099 fast/borders/border-image-inherits-with-border.html [ Failure ] +crbug.com/591099 fast/borders/border-image-inherits-with-border.html [ Failure Pass ] crbug.com/714962 fast/borders/border-image-outset-split-inline.html [ Failure ] crbug.com/714962 fast/borders/border-image-scaled.html [ Failure ] crbug.com/714962 fast/borders/border-inner-bleed.html [ Failure ] @@ -5999,7 +6005,7 @@ crbug.com/591099 fast/css/pseudo-element-backdrop-hit-test.html [ Crash ] crbug.com/591099 fast/css/pseudo-required-optional-005.html [ Crash ] crbug.com/591099 fast/css/shadow-dom-scope.html [ Crash ] -crbug.com/591099 fast/css/sticky/inline-sticky-abspos-child.html [ Crash ] +crbug.com/591099 fast/css/sticky/inline-sticky-abspos-child.html [ Crash Failure ] crbug.com/714962 fast/css/sticky/replaced-sticky.html [ Failure ] crbug.com/714962 fast/css/sticky/sticky-both-sides-bottom-right-constrained.html [ Failure ] crbug.com/714962 fast/css/sticky/sticky-top-overflow.html [ Failure Pass ] @@ -6152,7 +6158,7 @@ crbug.com/714962 fast/forms/calendar-picker/week-picker-mouse-operations.html [ Failure ] crbug.com/714962 fast/forms/checkbox/checkbox-focus-by-mouse.html [ Failure ] crbug.com/714962 fast/forms/color/input-color-chooser-shown-readonly.html [ Failure Pass ] -crbug.com/714962 fast/forms/color/input-color-chooser-shown.html [ Failure ] +crbug.com/714962 fast/forms/color/input-color-chooser-shown.html [ Crash Failure ] crbug.com/714962 fast/forms/cursor-at-editable-content-boundary.html [ Failure ] crbug.com/591099 fast/forms/datalist/input-appearance-range-with-datalist-rtl.html [ Crash ] crbug.com/591099 fast/forms/datalist/range-snap-to-datalist.html [ Crash ] @@ -6287,7 +6293,7 @@ crbug.com/714962 fast/forms/textarea/drag-out-of-textarea.html [ Failure ] crbug.com/714962 fast/forms/textarea/textarea-inline-block-baseline.html [ Failure Pass ] crbug.com/714962 fast/forms/textarea/textarea-resize-above-min-size-and-below-initial-size.html [ Failure ] -crbug.com/714962 fast/forms/textarea/textarea-resize-below-min-intrinsic-size.html [ Failure ] +crbug.com/714962 fast/forms/textarea/textarea-resize-below-min-intrinsic-size.html [ Failure Timeout ] crbug.com/714962 fast/forms/textarea/textarea-resize-below-min-size-zoomed.html [ Failure ] crbug.com/714962 fast/forms/textarea/textarea-resize-below-min-size.html [ Failure ] crbug.com/714962 fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events.html [ Failure ] @@ -6409,7 +6415,7 @@ crbug.com/591099 fast/parser/title-error-test.html [ Failure ] crbug.com/591099 fast/parser/xhtml-alternate-entities.xml [ Failure ] crbug.com/591099 fast/reflections/abs-position-in-reflection.html [ Failure ] -crbug.com/591099 fast/reflections/inline-crash.html [ Failure ] +crbug.com/591099 fast/reflections/inline-crash.html [ Crash Failure ] crbug.com/591099 fast/reflections/opacity-reflection-transform.html [ Failure ] crbug.com/591099 fast/reflections/reflection-direction.html [ Failure ] crbug.com/591099 fast/reflections/reflection-masks-opacity.html [ Failure ] @@ -6444,7 +6450,7 @@ crbug.com/591099 fast/replaced/percent-height-in-anonymous-block.html [ Failure ] crbug.com/591099 fast/replaced/preferred-widths.html [ Failure ] crbug.com/591099 fast/replaced/replaced-element-with-percentage-height-anonymous-block-parent.html [ Failure ] -crbug.com/591099 fast/replaced/replaced-last-line-layout.html [ Crash ] +crbug.com/591099 fast/replaced/replaced-last-line-layout.html [ Crash Pass ] crbug.com/591099 fast/replaced/selection-rect-in-table-cell.html [ Failure Pass ] crbug.com/591099 fast/replaced/selection-rect-transform.html [ Failure ] crbug.com/591099 fast/replaced/selection-rect.html [ Failure Pass ] @@ -6601,9 +6607,9 @@ crbug.com/591099 fast/selectors/placeholder-shown-sibling-style-update.html [ Failure ] crbug.com/591099 fast/selectors/placeholder-shown-style-update.html [ Failure ] crbug.com/591099 fast/selectors/querySelector-in-range-crash.html [ Crash ] -crbug.com/714962 fast/selectors/selection-window-inactive.html [ Failure ] -crbug.com/591099 fast/selectors/shadow-host-div-with-span.html [ Failure ] -crbug.com/591099 fast/selectors/shadow-host-div-with-text.html [ Failure ] +crbug.com/714962 fast/selectors/selection-window-inactive.html [ Failure Pass ] +crbug.com/591099 fast/selectors/shadow-host-div-with-span.html [ Failure Pass ] +crbug.com/591099 fast/selectors/shadow-host-div-with-text.html [ Failure Pass ] crbug.com/591099 fast/selectors/unqualified-hover-quirks.html [ Failure ] crbug.com/591099 fast/selectors/unqualified-hover-strict.html [ Failure ] crbug.com/591099 fast/selectors/visited-descendant.html [ Failure ] @@ -6714,6 +6720,7 @@ crbug.com/591099 fast/sub-pixel/inline-block-with-padding.html [ Failure ] crbug.com/714962 fast/sub-pixel/position-right-aligns-with-container.html [ Failure Pass ] crbug.com/591099 fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer.html [ Failure ] +crbug.com/591099 fast/sub-pixel/selection/selection-rect-in-sub-pixel-table.html [ Crash ] crbug.com/591099 fast/sub-pixel/should-not-repaint-subpixel-composited-layer.html [ Failure ] crbug.com/714962 fast/sub-pixel/size-of-span-with-different-positions.html [ Failure ] crbug.com/591099 fast/sub-pixel/sub-pixel-border-2.html [ Failure ] @@ -7033,7 +7040,7 @@ crbug.com/591099 fast/text/justify-ideograph-vertical.html [ Failure ] crbug.com/714962 fast/text/justify-padding-distribution.html [ Failure Pass ] crbug.com/591099 fast/text/large-text-composed-char.html [ Timeout ] -crbug.com/591099 fast/text/letter-spacing-leading-and-trailing.html [ Failure ] +crbug.com/591099 fast/text/letter-spacing-leading-and-trailing.html [ Crash Failure ] crbug.com/714962 fast/text/line-break-after-inline-latin1.html [ Failure ] crbug.com/591099 fast/text/long-word.html [ Failure Pass ] crbug.com/714962 fast/text/multiglyph-characters.html [ Failure ] @@ -7064,26 +7071,29 @@ crbug.com/591099 fast/text/place-rtl-ellipsis-in-inline-blocks.html [ Failure ] crbug.com/714962 fast/text/recalc-position-of-linebox-after-deleting-ellipsis.html [ Failure ] crbug.com/714962 fast/text/remove-zero-length-run.html [ Failure ] -crbug.com/714962 fast/text/selection/atsui-partial-selection.html [ Failure ] +crbug.com/714962 fast/text/selection/atsui-partial-selection.html [ Failure Pass ] crbug.com/714962 fast/text/selection/atsui-rtl-override-selection.html [ Failure ] -crbug.com/714962 fast/text/selection/complex-text-rtl-selection-repaint.html [ Failure ] +crbug.com/714962 fast/text/selection/complex-text-rtl-selection-repaint.html [ Crash Failure Pass ] +crbug.com/591099 fast/text/selection/complex-text-spaces-selection.html [ Crash Pass ] crbug.com/714962 fast/text/selection/flexbox-selection-nested.html [ Failure ] crbug.com/591099 fast/text/selection/flexbox-selection.html [ Failure ] +crbug.com/591099 fast/text/selection/hebrew-selection.html [ Crash Failure ] crbug.com/714962 fast/text/selection/insert-text-crash.html [ Failure ] -crbug.com/714962 fast/text/selection/justified-selection.html [ Failure ] +crbug.com/714962 fast/text/selection/justified-selection.html [ Failure Pass ] crbug.com/591099 fast/text/selection/khmer-selection.html [ Failure ] crbug.com/591099 fast/text/selection/offsetForPosition-complex-fallback.html [ Failure ] crbug.com/714962 fast/text/selection/pre-wrap-overflow-selection.html [ Failure ] +crbug.com/591099 fast/text/selection/repaint-glyph-bounds.html [ Failure ] crbug.com/714962 fast/text/selection/reset-drag-on-mouse-down.html [ Failure ] crbug.com/591099 fast/text/selection/selection-hard-linebreak.html [ Failure ] -crbug.com/714962 fast/text/selection/selection-multiple-runs.html [ Failure ] -crbug.com/714962 fast/text/selection/selection-painted-separately.html [ Failure ] -crbug.com/591099 fast/text/selection/selection-painting-hidpi.html [ Failure ] -crbug.com/591099 fast/text/selection/selection-rect-line-height-too-big.html [ Failure ] -crbug.com/591099 fast/text/selection/selection-rect-line-height-too-small.html [ Failure ] +crbug.com/714962 fast/text/selection/selection-multiple-runs.html [ Crash Failure Pass ] +crbug.com/714962 fast/text/selection/selection-painted-separately.html [ Failure Pass ] +crbug.com/591099 fast/text/selection/selection-painting-hidpi.html [ Failure Pass ] +crbug.com/591099 fast/text/selection/selection-rect-line-height-too-big.html [ Failure Pass ] +crbug.com/591099 fast/text/selection/selection-rect-line-height-too-small.html [ Failure Pass ] crbug.com/591099 fast/text/selection/selection-rect-rounding.html [ Failure ] -crbug.com/591099 fast/text/selection/selection-with-inline-padding.html [ Failure ] -crbug.com/714962 fast/text/selection/shaping-selection-rect.html [ Failure ] +crbug.com/591099 fast/text/selection/selection-with-inline-padding.html [ Crash Failure ] +crbug.com/714962 fast/text/selection/shaping-selection-rect.html [ Crash Failure ] crbug.com/714962 fast/text/selection/should-use-atsui.html [ Failure ] crbug.com/714962 fast/text/selection/thai-offsetForPosition-inside-character.html [ Failure ] crbug.com/591099 fast/text/shaping/same-script-different-lang.html [ Failure ] @@ -7206,7 +7216,7 @@ crbug.com/591099 fragmentation/block-after-float-first-child.html [ Failure ] crbug.com/591099 fragmentation/block-with-float-and-1-orphaned-line.html [ Failure ] crbug.com/591099 fragmentation/border-spacing-break-before-unbreakable-row.html [ Failure ] -crbug.com/591099 fragmentation/break-before-empty-child-block.html [ Failure ] +crbug.com/591099 fragmentation/break-before-empty-child-block.html [ Crash Failure ] crbug.com/591099 fragmentation/break-in-first-table-row-only.html [ Failure ] crbug.com/591099 fragmentation/break-in-second-table-section.html [ Failure ] crbug.com/591099 fragmentation/break-in-tbody-after-caption.html [ Failure ] @@ -7552,7 +7562,7 @@ crbug.com/714962 http/tests/devtools/layers/layer-canvas-log.js [ Failure ] crbug.com/591099 http/tests/devtools/network/network-columns-visible.js [ Failure Timeout ] crbug.com/591099 http/tests/devtools/network/network-datareceived.js [ Failure ] -crbug.com/591099 http/tests/devtools/network/network-disable-cache-preloads.js [ Failure ] +crbug.com/591099 http/tests/devtools/network/network-disable-cache-preloads.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/persistence/automapping-sourcemap-nameclash.js [ Failure ] crbug.com/591099 http/tests/devtools/persistence/persistence-tabbed-editor-opens-filesystem-uisourcecode.js [ Failure Timeout ] crbug.com/591099 http/tests/devtools/runtime/runtime-getProperties.js [ Failure ] @@ -7564,7 +7574,7 @@ crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-generator-details.js [ Failure ] crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-no-reveal.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/sources/debugger/properties-special.js [ Failure ] -crbug.com/591099 http/tests/devtools/startup/console/console-format-startup.js [ Failure ] +crbug.com/591099 http/tests/devtools/startup/console/console-format-startup.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/startup/reattach-after-editing-styles.html [ Crash Pass Timeout ] crbug.com/591099 http/tests/devtools/text-autosizing-override.js [ Failure ] crbug.com/714962 http/tests/devtools/tracing/scroll-invalidations.js [ Failure ] @@ -7602,6 +7612,7 @@ crbug.com/591099 http/tests/local/fileapi/file-last-modified-after-delete.html [ Failure ] crbug.com/591099 http/tests/local/fileapi/file-last-modified.html [ Failure ] crbug.com/714962 http/tests/local/fileapi/select-dragged-file-input-utf-8.html [ Failure ] +crbug.com/591099 http/tests/local/fileapi/select-dragged-file-input.html [ Skip ] crbug.com/591099 http/tests/local/fileapi/send-dragged-file.html [ Failure ] crbug.com/591099 http/tests/local/fileapi/send-sliced-dragged-file.html [ Failure ] crbug.com/714962 http/tests/local/formdata/form-data-with-unknown-file-extension.html [ Failure ] @@ -8085,6 +8096,7 @@ crbug.com/591099 paint/invalidation/clip/clip-path-resize.html [ Failure ] crbug.com/591099 paint/invalidation/clip/clip-unclip-and-change.html [ Failure ] crbug.com/591099 paint/invalidation/clip/clip-with-layout-delta.html [ Failure ] +crbug.com/591099 paint/invalidation/clip/clip-with-transform-resize.html [ Failure ] crbug.com/591099 paint/invalidation/clip/clipped-relative.html [ Failure ] crbug.com/591099 paint/invalidation/clip/control-clip.html [ Failure ] crbug.com/591099 paint/invalidation/clip/css-clip-change-stacking-child.html [ Failure ] @@ -8311,7 +8323,7 @@ crbug.com/591099 paint/invalidation/outline/continuation-after-outline.html [ Failure ] crbug.com/591099 paint/invalidation/outline/focus-continuations.html [ Failure ] crbug.com/591099 paint/invalidation/outline/focus-enable-continuations.html [ Failure ] -crbug.com/591099 paint/invalidation/outline/focus-layers.html [ Crash ] +crbug.com/591099 paint/invalidation/outline/focus-layers.html [ Crash Failure ] crbug.com/591099 paint/invalidation/outline/focus-ring-on-child-move.html [ Failure ] crbug.com/591099 paint/invalidation/outline/focus-ring-on-continuation-move.html [ Failure ] crbug.com/591099 paint/invalidation/outline/focus-ring-on-inline-continuation-move.html [ Failure ] @@ -8516,11 +8528,11 @@ crbug.com/714962 paint/invalidation/search-field-cancel.html [ Failure ] crbug.com/591099 paint/invalidation/selection/block-selection-gap-stale-cache-2.html [ Failure ] crbug.com/591099 paint/invalidation/selection/block-selection-gap-stale-cache.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Failure ] +crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html [ Crash Failure ] +crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ Crash Failure ] +crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ Crash Failure ] +crbug.com/591099 paint/invalidation/selection/invalidation-rect-includes-newline.html [ Crash Failure ] +crbug.com/591099 paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Crash Failure ] crbug.com/591099 paint/invalidation/selection/japanese-rl-selection-clear.html [ Failure ] crbug.com/591099 paint/invalidation/selection/japanese-rl-selection-repaint.html [ Failure ] crbug.com/714962 paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ Failure ] @@ -8528,16 +8540,16 @@ crbug.com/591099 paint/invalidation/selection/selection-after-delete.html [ Failure ] crbug.com/591099 paint/invalidation/selection/selection-after-remove.html [ Failure ] crbug.com/714962 paint/invalidation/selection/selection-and-text-repaint.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/selection-change-in-iframe-with-relative-parent.html [ Failure ] +crbug.com/591099 paint/invalidation/selection/selection-change-in-iframe-with-relative-parent.html [ Crash Failure ] crbug.com/591099 paint/invalidation/selection/selection-clear-after-move.html [ Failure Pass ] crbug.com/591099 paint/invalidation/selection/selection-clear.html [ Failure ] crbug.com/714962 paint/invalidation/selection/selection-in-composited-scrolling-container.html [ Failure ] crbug.com/714962 paint/invalidation/selection/selection-in-non-composited-scrolling-container.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/selection-partial-invalidation-between-blocks.html [ Failure Pass ] +crbug.com/591099 paint/invalidation/selection/selection-partial-invalidation-between-blocks.html [ Crash Failure Pass ] crbug.com/714962 paint/invalidation/selection/selection-repaint.html [ Failure ] crbug.com/591099 paint/invalidation/selection/selection-rl.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/selection-within-composited-scroller.html [ Failure ] -crbug.com/714962 paint/invalidation/selection/text-selection-rect-in-overflow-2.html [ Failure ] +crbug.com/591099 paint/invalidation/selection/selection-within-composited-scroller.html [ Crash Failure ] +crbug.com/714962 paint/invalidation/selection/text-selection-rect-in-overflow-2.html [ Crash Failure ] crbug.com/714962 paint/invalidation/selection/text-selection-rect-in-overflow.html [ Failure ] crbug.com/591099 paint/invalidation/shadow-multiple.html [ Failure ] crbug.com/591099 paint/invalidation/stacked-diacritics.html [ Failure ] @@ -8664,7 +8676,7 @@ crbug.com/714962 paint/invalidation/svg/use-detach.svg [ Failure ] crbug.com/714962 paint/invalidation/svg/use-disappears-after-style-update.svg [ Failure ] crbug.com/714962 paint/invalidation/svg/use-inherit-style.svg [ Failure ] -crbug.com/591099 paint/invalidation/svg/use-instanceRoot-event-bubbling.xhtml [ Pass Timeout ] +crbug.com/591099 paint/invalidation/svg/use-instanceRoot-event-bubbling.xhtml [ Crash Pass Timeout ] crbug.com/591099 paint/invalidation/svg/use-setAttribute-crash.svg [ Failure ] crbug.com/714962 paint/invalidation/svg/window.svg [ Failure ] crbug.com/714962 paint/invalidation/svg/zoom-coords-viewattr-01-b.svg [ Failure ] @@ -8818,19 +8830,19 @@ crbug.com/591099 paint/printing/print-text-shadow.html [ Failure ] crbug.com/591099 paint/roundedrects/circle-with-shadow.html [ Failure ] crbug.com/591099 paint/roundedrects/input-with-rounded-rect-and-shadow.html [ Failure ] -crbug.com/714962 paint/selection/text-selection-counter.html [ Failure ] +crbug.com/714962 paint/selection/text-selection-counter.html [ Failure Pass ] crbug.com/714962 paint/selection/text-selection-drag.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-inline-block-rtl.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-inline-block.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-across-blocks-line-beginning-end.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-across-blocks.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-br.html [ Failure ] +crbug.com/591099 paint/selection/text-selection-inline-block-rtl.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-inline-block.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-across-blocks-line-beginning-end.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-across-blocks.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-br.html [ Crash Failure ] crbug.com/591099 paint/selection/text-selection-newline-clipped-by-overflow.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-mixed-ltr-rtl.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-rtl-double-linebreak.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-rtl.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-span-across-line.html [ Failure ] -crbug.com/591099 paint/selection/text-selection-newline-span.html [ Failure ] +crbug.com/591099 paint/selection/text-selection-newline-mixed-ltr-rtl.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-rtl-double-linebreak.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-rtl.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-span-across-line.html [ Crash Failure ] +crbug.com/591099 paint/selection/text-selection-newline-span.html [ Crash Failure ] crbug.com/591099 paint/selection/text-selection-newline-vertical-lr.html [ Failure ] crbug.com/591099 paint/selection/text-selection-newline-vertical-rl.html [ Failure ] crbug.com/591099 paint/selection/text-selection-newline.html [ Failure ] @@ -10537,6 +10549,7 @@ crbug.com/714962 virtual/spv175/compositing/overflow/rtl-overflow.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/overflow/scaled-mask.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/overflow/scaled-overflow.html [ Failure ] +crbug.com/591099 virtual/spv175/compositing/overflow/scroll-ancestor-update.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/overflow/scroll-parent-absolute-with-backdrop-filter.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/overflow/scroll-parent-absolute.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor.html [ Failure ] @@ -10619,7 +10632,7 @@ crbug.com/591099 virtual/spv175/compositing/squashing/no-squashing-into-fixed-position-that-clips.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/squashing/opacity-squashed-owner.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/squashing/repaint-child-of-squashed.html [ Failure ] -crbug.com/591099 virtual/spv175/compositing/squashing/selection-repaint-with-gaps.html [ Failure ] +crbug.com/591099 virtual/spv175/compositing/squashing/selection-repaint-with-gaps.html [ Crash Failure ] crbug.com/591099 virtual/spv175/compositing/squashing/squash-above-fixed-1.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/squashing/squash-above-fixed-2.html [ Failure ] crbug.com/591099 virtual/spv175/compositing/squashing/squash-above-fixed-3.html [ Failure ] @@ -10734,6 +10747,7 @@ crbug.com/591099 virtual/spv175/paint/invalidation/clip/caret-ancestor-clip-change.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/clip/clip-unclip-and-change.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/clip/clip-with-layout-delta.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/clip/clip-with-transform-resize.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/clip/clipped-relative.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/clip/control-clip.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/clip/css-clip-change-stacking-child.html [ Failure ] @@ -10951,7 +10965,7 @@ crbug.com/591099 virtual/spv175/paint/invalidation/outline/continuation-after-outline.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-continuations.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-enable-continuations.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-layers.html [ Crash ] +crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-layers.html [ Crash Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-ring-on-child-move.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-ring-on-continuation-move.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/outline/focus-ring-on-inline-continuation-move.html [ Failure ] @@ -11075,6 +11089,7 @@ crbug.com/591099 virtual/spv175/paint/invalidation/remove-inline-after-layout.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/remove-inline-layer-after-layout.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/renderer-destruction-by-invalidateSelection-crash.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/repaint-across-writing-mode-boundary.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/repaint-descandant-on-ancestor-layer-move.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/repaint-in-iframe.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/repaint-on-style-change.html [ Failure ] @@ -11141,22 +11156,23 @@ crbug.com/591099 virtual/spv175/paint/invalidation/scroll/scrolled-iframe-scrollbar-change.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/block-selection-gap-stale-cache-2.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/block-selection-gap-stale-cache.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-includes-newline.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Crash Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/japanese-rl-selection-clear.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/japanese-rl-selection-repaint.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/selected-replaced.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-after-delete.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-after-remove.html [ Failure ] crbug.com/714962 virtual/spv175/paint/invalidation/selection/selection-and-text-repaint.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent.html [ Crash Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-clear.html [ Failure ] crbug.com/714962 virtual/spv175/paint/invalidation/selection/selection-repaint.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-within-composited-scroller.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/selection/text-selection-rect-in-overflow-2.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-rl.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/selection-within-composited-scroller.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/invalidation/selection/text-selection-rect-in-overflow-2.html [ Crash Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/selection/text-selection-rect-in-overflow.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/shadow-multiple.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/stacked-diacritics.html [ Failure ] @@ -11200,7 +11216,7 @@ crbug.com/714962 virtual/spv175/paint/invalidation/svg/text-xy-updates-SVGList.xhtml [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/svg/transform-focus-ring-repaint.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/svg/transform-foreign-object.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/invalidation/svg/use-instanceRoot-event-bubbling.xhtml [ Pass Timeout ] +crbug.com/591099 virtual/spv175/paint/invalidation/svg/use-instanceRoot-event-bubbling.xhtml [ Crash Pass Timeout ] crbug.com/591099 virtual/spv175/paint/invalidation/svg/use-setAttribute-crash.svg [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/table/add-table-overpaint.html [ Failure ] crbug.com/591099 virtual/spv175/paint/invalidation/table/block-selection-gap-in-table-cell.html [ Failure ] @@ -11334,19 +11350,19 @@ crbug.com/591099 virtual/spv175/paint/printing/print-text-shadow.html [ Failure ] crbug.com/591099 virtual/spv175/paint/roundedrects/circle-with-shadow.html [ Failure ] crbug.com/591099 virtual/spv175/paint/roundedrects/input-with-rounded-rect-and-shadow.html [ Failure ] -crbug.com/714962 virtual/spv175/paint/selection/text-selection-counter.html [ Failure ] +crbug.com/714962 virtual/spv175/paint/selection/text-selection-counter.html [ Failure Pass ] crbug.com/714962 virtual/spv175/paint/selection/text-selection-drag.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-inline-block-rtl.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-inline-block.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-across-blocks-line-beginning-end.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-across-blocks.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-br.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-inline-block-rtl.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-inline-block.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-across-blocks-line-beginning-end.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-across-blocks.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-br.html [ Crash Failure ] crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-clipped-by-overflow.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-mixed-ltr-rtl.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-rtl-double-linebreak.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-rtl.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-span-across-line.html [ Failure ] -crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-span.html [ Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-mixed-ltr-rtl.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-rtl-double-linebreak.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-rtl.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-span-across-line.html [ Crash Failure ] +crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-span.html [ Crash Failure ] crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-vertical-lr.html [ Failure ] crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline-vertical-rl.html [ Failure ] crbug.com/591099 virtual/spv175/paint/selection/text-selection-newline.html [ Failure ] @@ -11365,6 +11381,11 @@ crbug.com/591099 virtual/spv2/paint/invalidation/box/margin.html [ Failure Pass ] crbug.com/591099 virtual/stable/ [ Skip ] crbug.com/591099 virtual/threaded/ [ Skip ] +crbug.com/591099 virtual/unified-autoplay/external/wpt/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] +crbug.com/591099 virtual/unified-autoplay/external/wpt/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] +crbug.com/591099 virtual/unified-autoplay/external/wpt/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html [ Failure ] +crbug.com/591099 virtual/unified-autoplay/external/wpt/feature-policy/autoplay-default-feature-policy.https.sub.html [ Failure ] +crbug.com/591099 virtual/unified-autoplay/external/wpt/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html [ Failure ] crbug.com/591099 virtual/wheelscrolllatching/ [ Skip ] crbug.com/591099 webaudio/BiquadFilter/tail-time-lowpass.html [ Timeout ] crbug.com/591099 webexposed/element-instance-property-listing.html [ Pass Timeout ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 8f32db8c..49c7cb46 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2790,24 +2790,6 @@ crbug.com/709227 external/wpt/html/syntax/parsing/html5lib_webkit02.html?run_type=write_single [ Failure ] crbug.com/709227 external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/synthetic-errorevent-click.worker.html [ Failure ] crbug.com/709227 external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-error/workerglobalscope-synthetic-errorevent.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.html [ Failure ] -crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.html [ Failure ] crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.html [ Failure ] crbug.com/709227 external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.html [ Failure ] crbug.com/709227 external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/css-parser/color3-expected.txt b/third_party/WebKit/LayoutTests/css-parser/color3-expected.txt index 519ab76..9e92ff5 100644 --- a/third_party/WebKit/LayoutTests/css-parser/color3-expected.txt +++ b/third_party/WebKit/LayoutTests/css-parser/color3-expected.txt
@@ -110,12 +110,12 @@ PASS colorTest.parseColor("hsl(10, 50%, 0)") is "parse error" PASS colorTest.parseColor("hsl(50%, 50%, 0%)") is "parse error" PASS colorTest.parseColor("hsl(0, 0% 0%)") is "parse error" -PASS colorTest.parseColor("hsl(30deg, 100%, 100%)") is "parse error" +FAIL colorTest.parseColor("hsl(30deg, 100%, 100%)") should be parse error. Was rgb(255, 255, 255). PASS colorTest.parseColor("hsl(0, 0%, light)") is "parse error" PASS colorTest.parseColor("hsl()") is "parse error" PASS colorTest.parseColor("hsl(0)") is "parse error" PASS colorTest.parseColor("hsl(0, 0%)") is "parse error" -PASS colorTest.parseColor("hsl(0, 0%, 0%, 0%)") is "parse error" +FAIL colorTest.parseColor("hsl(0, 0%, 0%, 0%)") should be parse error. Was rgba(0, 0, 0, 0). PASS colorTest.parseColor("HSLA(-300, 100%, 37.5%, 1)") is "rgb(191, 191, 0)" PASS colorTest.parseColor("hsLA(-300, 100%, 37.5%, 12)") is "rgb(191, 191, 0)" PASS colorTest.parseColor("hsla(-300, 100%, 37.5%, 0.2)") is "rgba(191, 191, 0, 0.2)" @@ -124,12 +124,12 @@ PASS colorTest.parseColor("hsla(10, 50%, 0, 1)") is "parse error" PASS colorTest.parseColor("hsla(50%, 50%, 0%, 1)") is "parse error" PASS colorTest.parseColor("hsla(0, 0% 0%, 1)") is "parse error" -PASS colorTest.parseColor("hsla(30deg, 100%, 100%, 1)") is "parse error" +FAIL colorTest.parseColor("hsla(30deg, 100%, 100%, 1)") should be parse error. Was rgb(255, 255, 255). PASS colorTest.parseColor("hsla(0, 0%, light, 1)") is "parse error" PASS colorTest.parseColor("hsla()") is "parse error" PASS colorTest.parseColor("hsla(0)") is "parse error" PASS colorTest.parseColor("hsla(0, 0%)") is "parse error" -PASS colorTest.parseColor("hsla(0, 0%, 0%, 50%)") is "parse error" +FAIL colorTest.parseColor("hsla(0, 0%, 0%, 50%)") should be parse error. Was rgba(0, 0, 0, 0.498). PASS colorTest.parseColor("hsla(0, 0%, 0%, 1, 0%)") is "parse error" PASS colorTest.parseColor("cmyk(0, 0, 0, 0)") is "parse error" PASS successfullyParsed is true
diff --git a/third_party/WebKit/LayoutTests/css-parser/color3_hsl-expected.txt b/third_party/WebKit/LayoutTests/css-parser/color3_hsl-expected.txt index 36b6596c..8158180 100644 --- a/third_party/WebKit/LayoutTests/css-parser/color3_hsl-expected.txt +++ b/third_party/WebKit/LayoutTests/css-parser/color3_hsl-expected.txt
@@ -151,75 +151,75 @@ PASS colorTest.parseColor("hsl(0, 37.5%, 12.5%)") is "rgb(43, 19, 19)" PASS colorTest.parseColor("hsl(30, 37.5%, 12.5%)") is "rgb(43, 31, 19)" PASS colorTest.parseColor("hsl(60, 37.5%, 12.5%)") is "rgb(43, 43, 19)" -FAIL colorTest.parseColor("hsl(90, 37.5%, 12.5%)") should be rgb(31, 43, 19). Was rgb(32, 43, 19). +PASS colorTest.parseColor("hsl(90, 37.5%, 12.5%)") is "rgb(31, 43, 19)" PASS colorTest.parseColor("hsl(120, 37.5%, 12.5%)") is "rgb(19, 43, 19)" -FAIL colorTest.parseColor("hsl(150, 37.5%, 12.5%)") should be rgb(19, 43, 31). Was rgb(19, 43, 32). +PASS colorTest.parseColor("hsl(150, 37.5%, 12.5%)") is "rgb(19, 43, 31)" PASS colorTest.parseColor("hsl(180, 37.5%, 12.5%)") is "rgb(19, 43, 43)" PASS colorTest.parseColor("hsl(210, 37.5%, 12.5%)") is "rgb(19, 31, 43)" PASS colorTest.parseColor("hsl(240, 37.5%, 12.5%)") is "rgb(19, 19, 43)" PASS colorTest.parseColor("hsl(270, 37.5%, 12.5%)") is "rgb(31, 19, 43)" PASS colorTest.parseColor("hsl(300, 37.5%, 12.5%)") is "rgb(43, 19, 43)" -FAIL colorTest.parseColor("hsl(330, 37.5%, 12.5%)") should be rgb(43, 19, 31). Was rgb(43, 19, 32). +PASS colorTest.parseColor("hsl(330, 37.5%, 12.5%)") is "rgb(43, 19, 31)" PASS colorTest.parseColor("hsl(0, 50%, 12.5%)") is "rgb(47, 15, 15)" PASS colorTest.parseColor("hsl(30, 50%, 12.5%)") is "rgb(47, 31, 15)" PASS colorTest.parseColor("hsl(60, 50%, 12.5%)") is "rgb(47, 47, 15)" -FAIL colorTest.parseColor("hsl(90, 50%, 12.5%)") should be rgb(31, 47, 15). Was rgb(32, 47, 15). +PASS colorTest.parseColor("hsl(90, 50%, 12.5%)") is "rgb(31, 47, 15)" PASS colorTest.parseColor("hsl(120, 50%, 12.5%)") is "rgb(15, 47, 15)" -FAIL colorTest.parseColor("hsl(150, 50%, 12.5%)") should be rgb(15, 47, 31). Was rgb(15, 47, 32). +PASS colorTest.parseColor("hsl(150, 50%, 12.5%)") is "rgb(15, 47, 31)" PASS colorTest.parseColor("hsl(180, 50%, 12.5%)") is "rgb(15, 47, 47)" PASS colorTest.parseColor("hsl(210, 50%, 12.5%)") is "rgb(15, 31, 47)" PASS colorTest.parseColor("hsl(240, 50%, 12.5%)") is "rgb(15, 15, 47)" PASS colorTest.parseColor("hsl(270, 50%, 12.5%)") is "rgb(31, 15, 47)" PASS colorTest.parseColor("hsl(300, 50%, 12.5%)") is "rgb(47, 15, 47)" -FAIL colorTest.parseColor("hsl(330, 50%, 12.5%)") should be rgb(47, 15, 31). Was rgb(47, 15, 32). +PASS colorTest.parseColor("hsl(330, 50%, 12.5%)") is "rgb(47, 15, 31)" PASS colorTest.parseColor("hsl(0, 62.5%, 12.5%)") is "rgb(51, 11, 11)" PASS colorTest.parseColor("hsl(30, 62.5%, 12.5%)") is "rgb(51, 31, 11)" PASS colorTest.parseColor("hsl(60, 62.5%, 12.5%)") is "rgb(51, 51, 11)" -FAIL colorTest.parseColor("hsl(90, 62.5%, 12.5%)") should be rgb(31, 51, 11). Was rgb(32, 51, 11). +PASS colorTest.parseColor("hsl(90, 62.5%, 12.5%)") is "rgb(31, 51, 11)" PASS colorTest.parseColor("hsl(120, 62.5%, 12.5%)") is "rgb(11, 51, 11)" -FAIL colorTest.parseColor("hsl(150, 62.5%, 12.5%)") should be rgb(11, 51, 31). Was rgb(11, 51, 32). +PASS colorTest.parseColor("hsl(150, 62.5%, 12.5%)") is "rgb(11, 51, 31)" PASS colorTest.parseColor("hsl(180, 62.5%, 12.5%)") is "rgb(11, 51, 51)" PASS colorTest.parseColor("hsl(210, 62.5%, 12.5%)") is "rgb(11, 31, 51)" PASS colorTest.parseColor("hsl(240, 62.5%, 12.5%)") is "rgb(11, 11, 51)" PASS colorTest.parseColor("hsl(270, 62.5%, 12.5%)") is "rgb(31, 11, 51)" PASS colorTest.parseColor("hsl(300, 62.5%, 12.5%)") is "rgb(51, 11, 51)" -FAIL colorTest.parseColor("hsl(330, 62.5%, 12.5%)") should be rgb(51, 11, 31). Was rgb(51, 11, 32). +PASS colorTest.parseColor("hsl(330, 62.5%, 12.5%)") is "rgb(51, 11, 31)" PASS colorTest.parseColor("hsl(0, 75%, 12.5%)") is "rgb(55, 7, 7)" PASS colorTest.parseColor("hsl(30, 75%, 12.5%)") is "rgb(55, 31, 7)" PASS colorTest.parseColor("hsl(60, 75%, 12.5%)") is "rgb(55, 55, 7)" -FAIL colorTest.parseColor("hsl(90, 75%, 12.5%)") should be rgb(31, 55, 7). Was rgb(32, 55, 7). +PASS colorTest.parseColor("hsl(90, 75%, 12.5%)") is "rgb(31, 55, 7)" PASS colorTest.parseColor("hsl(120, 75%, 12.5%)") is "rgb(7, 55, 7)" -FAIL colorTest.parseColor("hsl(150, 75%, 12.5%)") should be rgb(7, 55, 31). Was rgb(7, 55, 32). +PASS colorTest.parseColor("hsl(150, 75%, 12.5%)") is "rgb(7, 55, 31)" PASS colorTest.parseColor("hsl(180, 75%, 12.5%)") is "rgb(7, 55, 55)" PASS colorTest.parseColor("hsl(210, 75%, 12.5%)") is "rgb(7, 31, 55)" PASS colorTest.parseColor("hsl(240, 75%, 12.5%)") is "rgb(7, 7, 55)" PASS colorTest.parseColor("hsl(270, 75%, 12.5%)") is "rgb(31, 7, 55)" PASS colorTest.parseColor("hsl(300, 75%, 12.5%)") is "rgb(55, 7, 55)" -FAIL colorTest.parseColor("hsl(330, 75%, 12.5%)") should be rgb(55, 7, 31). Was rgb(55, 7, 32). +PASS colorTest.parseColor("hsl(330, 75%, 12.5%)") is "rgb(55, 7, 31)" PASS colorTest.parseColor("hsl(0, 87.5%, 12.5%)") is "rgb(59, 3, 3)" PASS colorTest.parseColor("hsl(30, 87.5%, 12.5%)") is "rgb(59, 31, 3)" PASS colorTest.parseColor("hsl(60, 87.5%, 12.5%)") is "rgb(59, 59, 3)" -FAIL colorTest.parseColor("hsl(90, 87.5%, 12.5%)") should be rgb(31, 59, 3). Was rgb(32, 59, 3). +PASS colorTest.parseColor("hsl(90, 87.5%, 12.5%)") is "rgb(31, 59, 3)" PASS colorTest.parseColor("hsl(120, 87.5%, 12.5%)") is "rgb(3, 59, 3)" -FAIL colorTest.parseColor("hsl(150, 87.5%, 12.5%)") should be rgb(3, 59, 31). Was rgb(3, 59, 32). +PASS colorTest.parseColor("hsl(150, 87.5%, 12.5%)") is "rgb(3, 59, 31)" PASS colorTest.parseColor("hsl(180, 87.5%, 12.5%)") is "rgb(3, 59, 59)" PASS colorTest.parseColor("hsl(210, 87.5%, 12.5%)") is "rgb(3, 31, 59)" PASS colorTest.parseColor("hsl(240, 87.5%, 12.5%)") is "rgb(3, 3, 59)" PASS colorTest.parseColor("hsl(270, 87.5%, 12.5%)") is "rgb(31, 3, 59)" PASS colorTest.parseColor("hsl(300, 87.5%, 12.5%)") is "rgb(59, 3, 59)" -FAIL colorTest.parseColor("hsl(330, 87.5%, 12.5%)") should be rgb(59, 3, 31). Was rgb(59, 3, 32). +PASS colorTest.parseColor("hsl(330, 87.5%, 12.5%)") is "rgb(59, 3, 31)" PASS colorTest.parseColor("hsl(0, 100%, 12.5%)") is "rgb(63, 0, 0)" PASS colorTest.parseColor("hsl(30, 100%, 12.5%)") is "rgb(63, 31, 0)" PASS colorTest.parseColor("hsl(60, 100%, 12.5%)") is "rgb(63, 63, 0)" -FAIL colorTest.parseColor("hsl(90, 100%, 12.5%)") should be rgb(31, 63, 0). Was rgb(32, 63, 0). +PASS colorTest.parseColor("hsl(90, 100%, 12.5%)") is "rgb(31, 63, 0)" PASS colorTest.parseColor("hsl(120, 100%, 12.5%)") is "rgb(0, 63, 0)" -FAIL colorTest.parseColor("hsl(150, 100%, 12.5%)") should be rgb(0, 63, 31). Was rgb(0, 63, 32). +PASS colorTest.parseColor("hsl(150, 100%, 12.5%)") is "rgb(0, 63, 31)" PASS colorTest.parseColor("hsl(180, 100%, 12.5%)") is "rgb(0, 63, 63)" PASS colorTest.parseColor("hsl(210, 100%, 12.5%)") is "rgb(0, 31, 63)" PASS colorTest.parseColor("hsl(240, 100%, 12.5%)") is "rgb(0, 0, 63)" PASS colorTest.parseColor("hsl(270, 100%, 12.5%)") is "rgb(31, 0, 63)" PASS colorTest.parseColor("hsl(300, 100%, 12.5%)") is "rgb(63, 0, 63)" -FAIL colorTest.parseColor("hsl(330, 100%, 12.5%)") should be rgb(63, 0, 31). Was rgb(63, 0, 32). +PASS colorTest.parseColor("hsl(330, 100%, 12.5%)") is "rgb(63, 0, 31)" PASS colorTest.parseColor("hsl(0, 0%, 25%)") is "rgb(63, 63, 63)" PASS colorTest.parseColor("hsl(30, 0%, 25%)") is "rgb(63, 63, 63)" PASS colorTest.parseColor("hsl(60, 0%, 25%)") is "rgb(63, 63, 63)" @@ -259,75 +259,75 @@ PASS colorTest.parseColor("hsl(0, 37.5%, 25%)") is "rgb(87, 39, 39)" PASS colorTest.parseColor("hsl(30, 37.5%, 25%)") is "rgb(87, 63, 39)" PASS colorTest.parseColor("hsl(60, 37.5%, 25%)") is "rgb(87, 87, 39)" -FAIL colorTest.parseColor("hsl(90, 37.5%, 25%)") should be rgb(63, 87, 39). Was rgb(64, 87, 39). +PASS colorTest.parseColor("hsl(90, 37.5%, 25%)") is "rgb(63, 87, 39)" PASS colorTest.parseColor("hsl(120, 37.5%, 25%)") is "rgb(39, 87, 39)" -FAIL colorTest.parseColor("hsl(150, 37.5%, 25%)") should be rgb(39, 87, 63). Was rgb(39, 87, 64). +PASS colorTest.parseColor("hsl(150, 37.5%, 25%)") is "rgb(39, 87, 63)" PASS colorTest.parseColor("hsl(180, 37.5%, 25%)") is "rgb(39, 87, 87)" PASS colorTest.parseColor("hsl(210, 37.5%, 25%)") is "rgb(39, 63, 87)" PASS colorTest.parseColor("hsl(240, 37.5%, 25%)") is "rgb(39, 39, 87)" PASS colorTest.parseColor("hsl(270, 37.5%, 25%)") is "rgb(63, 39, 87)" PASS colorTest.parseColor("hsl(300, 37.5%, 25%)") is "rgb(87, 39, 87)" -FAIL colorTest.parseColor("hsl(330, 37.5%, 25%)") should be rgb(87, 39, 63). Was rgb(87, 39, 64). +PASS colorTest.parseColor("hsl(330, 37.5%, 25%)") is "rgb(87, 39, 63)" PASS colorTest.parseColor("hsl(0, 50%, 25%)") is "rgb(95, 31, 31)" PASS colorTest.parseColor("hsl(30, 50%, 25%)") is "rgb(95, 63, 31)" PASS colorTest.parseColor("hsl(60, 50%, 25%)") is "rgb(95, 95, 31)" -FAIL colorTest.parseColor("hsl(90, 50%, 25%)") should be rgb(63, 95, 31). Was rgb(64, 95, 31). +PASS colorTest.parseColor("hsl(90, 50%, 25%)") is "rgb(63, 95, 31)" PASS colorTest.parseColor("hsl(120, 50%, 25%)") is "rgb(31, 95, 31)" -FAIL colorTest.parseColor("hsl(150, 50%, 25%)") should be rgb(31, 95, 63). Was rgb(31, 95, 64). +PASS colorTest.parseColor("hsl(150, 50%, 25%)") is "rgb(31, 95, 63)" PASS colorTest.parseColor("hsl(180, 50%, 25%)") is "rgb(31, 95, 95)" PASS colorTest.parseColor("hsl(210, 50%, 25%)") is "rgb(31, 63, 95)" PASS colorTest.parseColor("hsl(240, 50%, 25%)") is "rgb(31, 31, 95)" PASS colorTest.parseColor("hsl(270, 50%, 25%)") is "rgb(63, 31, 95)" PASS colorTest.parseColor("hsl(300, 50%, 25%)") is "rgb(95, 31, 95)" -FAIL colorTest.parseColor("hsl(330, 50%, 25%)") should be rgb(95, 31, 63). Was rgb(95, 31, 64). +PASS colorTest.parseColor("hsl(330, 50%, 25%)") is "rgb(95, 31, 63)" PASS colorTest.parseColor("hsl(0, 62.5%, 25%)") is "rgb(103, 23, 23)" PASS colorTest.parseColor("hsl(30, 62.5%, 25%)") is "rgb(103, 63, 23)" PASS colorTest.parseColor("hsl(60, 62.5%, 25%)") is "rgb(103, 103, 23)" -FAIL colorTest.parseColor("hsl(90, 62.5%, 25%)") should be rgb(63, 103, 23). Was rgb(64, 103, 23). +PASS colorTest.parseColor("hsl(90, 62.5%, 25%)") is "rgb(63, 103, 23)" PASS colorTest.parseColor("hsl(120, 62.5%, 25%)") is "rgb(23, 103, 23)" -FAIL colorTest.parseColor("hsl(150, 62.5%, 25%)") should be rgb(23, 103, 63). Was rgb(23, 103, 64). +PASS colorTest.parseColor("hsl(150, 62.5%, 25%)") is "rgb(23, 103, 63)" PASS colorTest.parseColor("hsl(180, 62.5%, 25%)") is "rgb(23, 103, 103)" PASS colorTest.parseColor("hsl(210, 62.5%, 25%)") is "rgb(23, 63, 103)" PASS colorTest.parseColor("hsl(240, 62.5%, 25%)") is "rgb(23, 23, 103)" PASS colorTest.parseColor("hsl(270, 62.5%, 25%)") is "rgb(63, 23, 103)" PASS colorTest.parseColor("hsl(300, 62.5%, 25%)") is "rgb(103, 23, 103)" -FAIL colorTest.parseColor("hsl(330, 62.5%, 25%)") should be rgb(103, 23, 63). Was rgb(103, 23, 64). +PASS colorTest.parseColor("hsl(330, 62.5%, 25%)") is "rgb(103, 23, 63)" PASS colorTest.parseColor("hsl(0, 75%, 25%)") is "rgb(111, 15, 15)" PASS colorTest.parseColor("hsl(30, 75%, 25%)") is "rgb(111, 63, 15)" PASS colorTest.parseColor("hsl(60, 75%, 25%)") is "rgb(111, 111, 15)" -FAIL colorTest.parseColor("hsl(90, 75%, 25%)") should be rgb(63, 111, 15). Was rgb(64, 111, 15). +PASS colorTest.parseColor("hsl(90, 75%, 25%)") is "rgb(63, 111, 15)" PASS colorTest.parseColor("hsl(120, 75%, 25%)") is "rgb(15, 111, 15)" -FAIL colorTest.parseColor("hsl(150, 75%, 25%)") should be rgb(15, 111, 63). Was rgb(15, 111, 64). +PASS colorTest.parseColor("hsl(150, 75%, 25%)") is "rgb(15, 111, 63)" PASS colorTest.parseColor("hsl(180, 75%, 25%)") is "rgb(15, 111, 111)" PASS colorTest.parseColor("hsl(210, 75%, 25%)") is "rgb(15, 63, 111)" PASS colorTest.parseColor("hsl(240, 75%, 25%)") is "rgb(15, 15, 111)" PASS colorTest.parseColor("hsl(270, 75%, 25%)") is "rgb(63, 15, 111)" PASS colorTest.parseColor("hsl(300, 75%, 25%)") is "rgb(111, 15, 111)" -FAIL colorTest.parseColor("hsl(330, 75%, 25%)") should be rgb(111, 15, 63). Was rgb(111, 15, 64). +PASS colorTest.parseColor("hsl(330, 75%, 25%)") is "rgb(111, 15, 63)" PASS colorTest.parseColor("hsl(0, 87.5%, 25%)") is "rgb(119, 7, 7)" PASS colorTest.parseColor("hsl(30, 87.5%, 25%)") is "rgb(119, 63, 7)" PASS colorTest.parseColor("hsl(60, 87.5%, 25%)") is "rgb(119, 119, 7)" -FAIL colorTest.parseColor("hsl(90, 87.5%, 25%)") should be rgb(63, 119, 7). Was rgb(64, 119, 7). +PASS colorTest.parseColor("hsl(90, 87.5%, 25%)") is "rgb(63, 119, 7)" PASS colorTest.parseColor("hsl(120, 87.5%, 25%)") is "rgb(7, 119, 7)" -FAIL colorTest.parseColor("hsl(150, 87.5%, 25%)") should be rgb(7, 119, 63). Was rgb(7, 119, 64). +PASS colorTest.parseColor("hsl(150, 87.5%, 25%)") is "rgb(7, 119, 63)" PASS colorTest.parseColor("hsl(180, 87.5%, 25%)") is "rgb(7, 119, 119)" PASS colorTest.parseColor("hsl(210, 87.5%, 25%)") is "rgb(7, 63, 119)" PASS colorTest.parseColor("hsl(240, 87.5%, 25%)") is "rgb(7, 7, 119)" PASS colorTest.parseColor("hsl(270, 87.5%, 25%)") is "rgb(63, 7, 119)" PASS colorTest.parseColor("hsl(300, 87.5%, 25%)") is "rgb(119, 7, 119)" -FAIL colorTest.parseColor("hsl(330, 87.5%, 25%)") should be rgb(119, 7, 63). Was rgb(119, 7, 64). +PASS colorTest.parseColor("hsl(330, 87.5%, 25%)") is "rgb(119, 7, 63)" PASS colorTest.parseColor("hsl(0, 100%, 25%)") is "rgb(127, 0, 0)" PASS colorTest.parseColor("hsl(30, 100%, 25%)") is "rgb(127, 63, 0)" PASS colorTest.parseColor("hsl(60, 100%, 25%)") is "rgb(127, 127, 0)" -FAIL colorTest.parseColor("hsl(90, 100%, 25%)") should be rgb(63, 127, 0). Was rgb(64, 127, 0). +PASS colorTest.parseColor("hsl(90, 100%, 25%)") is "rgb(63, 127, 0)" PASS colorTest.parseColor("hsl(120, 100%, 25%)") is "rgb(0, 127, 0)" -FAIL colorTest.parseColor("hsl(150, 100%, 25%)") should be rgb(0, 127, 63). Was rgb(0, 127, 64). +PASS colorTest.parseColor("hsl(150, 100%, 25%)") is "rgb(0, 127, 63)" PASS colorTest.parseColor("hsl(180, 100%, 25%)") is "rgb(0, 127, 127)" PASS colorTest.parseColor("hsl(210, 100%, 25%)") is "rgb(0, 63, 127)" PASS colorTest.parseColor("hsl(240, 100%, 25%)") is "rgb(0, 0, 127)" PASS colorTest.parseColor("hsl(270, 100%, 25%)") is "rgb(63, 0, 127)" PASS colorTest.parseColor("hsl(300, 100%, 25%)") is "rgb(127, 0, 127)" -FAIL colorTest.parseColor("hsl(330, 100%, 25%)") should be rgb(127, 0, 63). Was rgb(127, 0, 64). +PASS colorTest.parseColor("hsl(330, 100%, 25%)") is "rgb(127, 0, 63)" PASS colorTest.parseColor("hsl(0, 0%, 37.5%)") is "rgb(95, 95, 95)" PASS colorTest.parseColor("hsl(30, 0%, 37.5%)") is "rgb(95, 95, 95)" PASS colorTest.parseColor("hsl(60, 0%, 37.5%)") is "rgb(95, 95, 95)" @@ -355,87 +355,87 @@ PASS colorTest.parseColor("hsl(0, 25%, 37.5%)") is "rgb(119, 71, 71)" PASS colorTest.parseColor("hsl(30, 25%, 37.5%)") is "rgb(119, 95, 71)" PASS colorTest.parseColor("hsl(60, 25%, 37.5%)") is "rgb(119, 119, 71)" -FAIL colorTest.parseColor("hsl(90, 25%, 37.5%)") should be rgb(95, 119, 71). Was rgb(96, 119, 71). +PASS colorTest.parseColor("hsl(90, 25%, 37.5%)") is "rgb(95, 119, 71)" PASS colorTest.parseColor("hsl(120, 25%, 37.5%)") is "rgb(71, 119, 71)" -FAIL colorTest.parseColor("hsl(150, 25%, 37.5%)") should be rgb(71, 119, 95). Was rgb(71, 119, 96). +PASS colorTest.parseColor("hsl(150, 25%, 37.5%)") is "rgb(71, 119, 95)" PASS colorTest.parseColor("hsl(180, 25%, 37.5%)") is "rgb(71, 119, 119)" PASS colorTest.parseColor("hsl(210, 25%, 37.5%)") is "rgb(71, 95, 119)" PASS colorTest.parseColor("hsl(240, 25%, 37.5%)") is "rgb(71, 71, 119)" PASS colorTest.parseColor("hsl(270, 25%, 37.5%)") is "rgb(95, 71, 119)" PASS colorTest.parseColor("hsl(300, 25%, 37.5%)") is "rgb(119, 71, 119)" -FAIL colorTest.parseColor("hsl(330, 25%, 37.5%)") should be rgb(119, 71, 95). Was rgb(119, 71, 96). +PASS colorTest.parseColor("hsl(330, 25%, 37.5%)") is "rgb(119, 71, 95)" PASS colorTest.parseColor("hsl(0, 37.5%, 37.5%)") is "rgb(131, 59, 59)" PASS colorTest.parseColor("hsl(30, 37.5%, 37.5%)") is "rgb(131, 95, 59)" PASS colorTest.parseColor("hsl(60, 37.5%, 37.5%)") is "rgb(131, 131, 59)" -FAIL colorTest.parseColor("hsl(90, 37.5%, 37.5%)") should be rgb(95, 131, 59). Was rgb(96, 131, 59). +PASS colorTest.parseColor("hsl(90, 37.5%, 37.5%)") is "rgb(95, 131, 59)" PASS colorTest.parseColor("hsl(120, 37.5%, 37.5%)") is "rgb(59, 131, 59)" -FAIL colorTest.parseColor("hsl(150, 37.5%, 37.5%)") should be rgb(59, 131, 95). Was rgb(59, 131, 96). +PASS colorTest.parseColor("hsl(150, 37.5%, 37.5%)") is "rgb(59, 131, 95)" PASS colorTest.parseColor("hsl(180, 37.5%, 37.5%)") is "rgb(59, 131, 131)" PASS colorTest.parseColor("hsl(210, 37.5%, 37.5%)") is "rgb(59, 95, 131)" PASS colorTest.parseColor("hsl(240, 37.5%, 37.5%)") is "rgb(59, 59, 131)" PASS colorTest.parseColor("hsl(270, 37.5%, 37.5%)") is "rgb(95, 59, 131)" PASS colorTest.parseColor("hsl(300, 37.5%, 37.5%)") is "rgb(131, 59, 131)" -FAIL colorTest.parseColor("hsl(330, 37.5%, 37.5%)") should be rgb(131, 59, 95). Was rgb(131, 59, 96). +PASS colorTest.parseColor("hsl(330, 37.5%, 37.5%)") is "rgb(131, 59, 95)" PASS colorTest.parseColor("hsl(0, 50%, 37.5%)") is "rgb(143, 47, 47)" PASS colorTest.parseColor("hsl(30, 50%, 37.5%)") is "rgb(143, 95, 47)" PASS colorTest.parseColor("hsl(60, 50%, 37.5%)") is "rgb(143, 143, 47)" -FAIL colorTest.parseColor("hsl(90, 50%, 37.5%)") should be rgb(95, 143, 47). Was rgb(96, 143, 47). +PASS colorTest.parseColor("hsl(90, 50%, 37.5%)") is "rgb(95, 143, 47)" PASS colorTest.parseColor("hsl(120, 50%, 37.5%)") is "rgb(47, 143, 47)" -FAIL colorTest.parseColor("hsl(150, 50%, 37.5%)") should be rgb(47, 143, 95). Was rgb(47, 143, 96). +PASS colorTest.parseColor("hsl(150, 50%, 37.5%)") is "rgb(47, 143, 95)" PASS colorTest.parseColor("hsl(180, 50%, 37.5%)") is "rgb(47, 143, 143)" PASS colorTest.parseColor("hsl(210, 50%, 37.5%)") is "rgb(47, 95, 143)" PASS colorTest.parseColor("hsl(240, 50%, 37.5%)") is "rgb(47, 47, 143)" PASS colorTest.parseColor("hsl(270, 50%, 37.5%)") is "rgb(95, 47, 143)" PASS colorTest.parseColor("hsl(300, 50%, 37.5%)") is "rgb(143, 47, 143)" -FAIL colorTest.parseColor("hsl(330, 50%, 37.5%)") should be rgb(143, 47, 95). Was rgb(143, 47, 96). +PASS colorTest.parseColor("hsl(330, 50%, 37.5%)") is "rgb(143, 47, 95)" PASS colorTest.parseColor("hsl(0, 62.5%, 37.5%)") is "rgb(155, 35, 35)" PASS colorTest.parseColor("hsl(30, 62.5%, 37.5%)") is "rgb(155, 95, 35)" PASS colorTest.parseColor("hsl(60, 62.5%, 37.5%)") is "rgb(155, 155, 35)" -FAIL colorTest.parseColor("hsl(90, 62.5%, 37.5%)") should be rgb(95, 155, 35). Was rgb(96, 155, 35). +PASS colorTest.parseColor("hsl(90, 62.5%, 37.5%)") is "rgb(95, 155, 35)" PASS colorTest.parseColor("hsl(120, 62.5%, 37.5%)") is "rgb(35, 155, 35)" -FAIL colorTest.parseColor("hsl(150, 62.5%, 37.5%)") should be rgb(35, 155, 95). Was rgb(35, 155, 96). +PASS colorTest.parseColor("hsl(150, 62.5%, 37.5%)") is "rgb(35, 155, 95)" PASS colorTest.parseColor("hsl(180, 62.5%, 37.5%)") is "rgb(35, 155, 155)" PASS colorTest.parseColor("hsl(210, 62.5%, 37.5%)") is "rgb(35, 95, 155)" PASS colorTest.parseColor("hsl(240, 62.5%, 37.5%)") is "rgb(35, 35, 155)" PASS colorTest.parseColor("hsl(270, 62.5%, 37.5%)") is "rgb(95, 35, 155)" PASS colorTest.parseColor("hsl(300, 62.5%, 37.5%)") is "rgb(155, 35, 155)" -FAIL colorTest.parseColor("hsl(330, 62.5%, 37.5%)") should be rgb(155, 35, 95). Was rgb(155, 35, 96). +PASS colorTest.parseColor("hsl(330, 62.5%, 37.5%)") is "rgb(155, 35, 95)" PASS colorTest.parseColor("hsl(0, 75%, 37.5%)") is "rgb(167, 23, 23)" PASS colorTest.parseColor("hsl(30, 75%, 37.5%)") is "rgb(167, 95, 23)" PASS colorTest.parseColor("hsl(60, 75%, 37.5%)") is "rgb(167, 167, 23)" -FAIL colorTest.parseColor("hsl(90, 75%, 37.5%)") should be rgb(95, 167, 23). Was rgb(96, 167, 23). +PASS colorTest.parseColor("hsl(90, 75%, 37.5%)") is "rgb(95, 167, 23)" PASS colorTest.parseColor("hsl(120, 75%, 37.5%)") is "rgb(23, 167, 23)" -FAIL colorTest.parseColor("hsl(150, 75%, 37.5%)") should be rgb(23, 167, 95). Was rgb(23, 167, 96). +PASS colorTest.parseColor("hsl(150, 75%, 37.5%)") is "rgb(23, 167, 95)" PASS colorTest.parseColor("hsl(180, 75%, 37.5%)") is "rgb(23, 167, 167)" PASS colorTest.parseColor("hsl(210, 75%, 37.5%)") is "rgb(23, 95, 167)" PASS colorTest.parseColor("hsl(240, 75%, 37.5%)") is "rgb(23, 23, 167)" PASS colorTest.parseColor("hsl(270, 75%, 37.5%)") is "rgb(95, 23, 167)" PASS colorTest.parseColor("hsl(300, 75%, 37.5%)") is "rgb(167, 23, 167)" -FAIL colorTest.parseColor("hsl(330, 75%, 37.5%)") should be rgb(167, 23, 95). Was rgb(167, 23, 96). +PASS colorTest.parseColor("hsl(330, 75%, 37.5%)") is "rgb(167, 23, 95)" PASS colorTest.parseColor("hsl(0, 87.5%, 37.5%)") is "rgb(179, 11, 11)" PASS colorTest.parseColor("hsl(30, 87.5%, 37.5%)") is "rgb(179, 95, 11)" PASS colorTest.parseColor("hsl(60, 87.5%, 37.5%)") is "rgb(179, 179, 11)" -FAIL colorTest.parseColor("hsl(90, 87.5%, 37.5%)") should be rgb(95, 179, 11). Was rgb(96, 179, 11). +PASS colorTest.parseColor("hsl(90, 87.5%, 37.5%)") is "rgb(95, 179, 11)" PASS colorTest.parseColor("hsl(120, 87.5%, 37.5%)") is "rgb(11, 179, 11)" -FAIL colorTest.parseColor("hsl(150, 87.5%, 37.5%)") should be rgb(11, 179, 95). Was rgb(11, 179, 96). +PASS colorTest.parseColor("hsl(150, 87.5%, 37.5%)") is "rgb(11, 179, 95)" PASS colorTest.parseColor("hsl(180, 87.5%, 37.5%)") is "rgb(11, 179, 179)" PASS colorTest.parseColor("hsl(210, 87.5%, 37.5%)") is "rgb(11, 95, 179)" PASS colorTest.parseColor("hsl(240, 87.5%, 37.5%)") is "rgb(11, 11, 179)" PASS colorTest.parseColor("hsl(270, 87.5%, 37.5%)") is "rgb(95, 11, 179)" PASS colorTest.parseColor("hsl(300, 87.5%, 37.5%)") is "rgb(179, 11, 179)" -FAIL colorTest.parseColor("hsl(330, 87.5%, 37.5%)") should be rgb(179, 11, 95). Was rgb(179, 11, 96). +PASS colorTest.parseColor("hsl(330, 87.5%, 37.5%)") is "rgb(179, 11, 95)" PASS colorTest.parseColor("hsl(0, 100%, 37.5%)") is "rgb(191, 0, 0)" PASS colorTest.parseColor("hsl(30, 100%, 37.5%)") is "rgb(191, 95, 0)" PASS colorTest.parseColor("hsl(60, 100%, 37.5%)") is "rgb(191, 191, 0)" -FAIL colorTest.parseColor("hsl(90, 100%, 37.5%)") should be rgb(95, 191, 0). Was rgb(96, 191, 0). +PASS colorTest.parseColor("hsl(90, 100%, 37.5%)") is "rgb(95, 191, 0)" PASS colorTest.parseColor("hsl(120, 100%, 37.5%)") is "rgb(0, 191, 0)" -FAIL colorTest.parseColor("hsl(150, 100%, 37.5%)") should be rgb(0, 191, 95). Was rgb(0, 191, 96). +PASS colorTest.parseColor("hsl(150, 100%, 37.5%)") is "rgb(0, 191, 95)" PASS colorTest.parseColor("hsl(180, 100%, 37.5%)") is "rgb(0, 191, 191)" PASS colorTest.parseColor("hsl(210, 100%, 37.5%)") is "rgb(0, 95, 191)" PASS colorTest.parseColor("hsl(240, 100%, 37.5%)") is "rgb(0, 0, 191)" PASS colorTest.parseColor("hsl(270, 100%, 37.5%)") is "rgb(95, 0, 191)" PASS colorTest.parseColor("hsl(300, 100%, 37.5%)") is "rgb(191, 0, 191)" -FAIL colorTest.parseColor("hsl(330, 100%, 37.5%)") should be rgb(191, 0, 95). Was rgb(191, 0, 96). +PASS colorTest.parseColor("hsl(330, 100%, 37.5%)") is "rgb(191, 0, 95)" PASS colorTest.parseColor("hsl(0, 0%, 50%)") is "rgb(127, 127, 127)" PASS colorTest.parseColor("hsl(30, 0%, 50%)") is "rgb(127, 127, 127)" PASS colorTest.parseColor("hsl(60, 0%, 50%)") is "rgb(127, 127, 127)" @@ -475,75 +475,75 @@ PASS colorTest.parseColor("hsl(0, 37.5%, 50%)") is "rgb(175, 79, 79)" PASS colorTest.parseColor("hsl(30, 37.5%, 50%)") is "rgb(175, 127, 79)" PASS colorTest.parseColor("hsl(60, 37.5%, 50%)") is "rgb(175, 175, 79)" -FAIL colorTest.parseColor("hsl(90, 37.5%, 50%)") should be rgb(127, 175, 79). Was rgb(128, 175, 79). +PASS colorTest.parseColor("hsl(90, 37.5%, 50%)") is "rgb(127, 175, 79)" PASS colorTest.parseColor("hsl(120, 37.5%, 50%)") is "rgb(79, 175, 79)" -FAIL colorTest.parseColor("hsl(150, 37.5%, 50%)") should be rgb(79, 175, 127). Was rgb(79, 175, 128). +PASS colorTest.parseColor("hsl(150, 37.5%, 50%)") is "rgb(79, 175, 127)" PASS colorTest.parseColor("hsl(180, 37.5%, 50%)") is "rgb(79, 175, 175)" PASS colorTest.parseColor("hsl(210, 37.5%, 50%)") is "rgb(79, 127, 175)" PASS colorTest.parseColor("hsl(240, 37.5%, 50%)") is "rgb(79, 79, 175)" PASS colorTest.parseColor("hsl(270, 37.5%, 50%)") is "rgb(127, 79, 175)" PASS colorTest.parseColor("hsl(300, 37.5%, 50%)") is "rgb(175, 79, 175)" -FAIL colorTest.parseColor("hsl(330, 37.5%, 50%)") should be rgb(175, 79, 127). Was rgb(175, 79, 128). +PASS colorTest.parseColor("hsl(330, 37.5%, 50%)") is "rgb(175, 79, 127)" PASS colorTest.parseColor("hsl(0, 50%, 50%)") is "rgb(191, 63, 63)" PASS colorTest.parseColor("hsl(30, 50%, 50%)") is "rgb(191, 127, 63)" PASS colorTest.parseColor("hsl(60, 50%, 50%)") is "rgb(191, 191, 63)" -FAIL colorTest.parseColor("hsl(90, 50%, 50%)") should be rgb(127, 191, 63). Was rgb(128, 191, 63). +PASS colorTest.parseColor("hsl(90, 50%, 50%)") is "rgb(127, 191, 63)" PASS colorTest.parseColor("hsl(120, 50%, 50%)") is "rgb(63, 191, 63)" -FAIL colorTest.parseColor("hsl(150, 50%, 50%)") should be rgb(63, 191, 127). Was rgb(63, 191, 128). +PASS colorTest.parseColor("hsl(150, 50%, 50%)") is "rgb(63, 191, 127)" PASS colorTest.parseColor("hsl(180, 50%, 50%)") is "rgb(63, 191, 191)" PASS colorTest.parseColor("hsl(210, 50%, 50%)") is "rgb(63, 127, 191)" PASS colorTest.parseColor("hsl(240, 50%, 50%)") is "rgb(63, 63, 191)" PASS colorTest.parseColor("hsl(270, 50%, 50%)") is "rgb(127, 63, 191)" PASS colorTest.parseColor("hsl(300, 50%, 50%)") is "rgb(191, 63, 191)" -FAIL colorTest.parseColor("hsl(330, 50%, 50%)") should be rgb(191, 63, 127). Was rgb(191, 63, 128). +PASS colorTest.parseColor("hsl(330, 50%, 50%)") is "rgb(191, 63, 127)" PASS colorTest.parseColor("hsl(0, 62.5%, 50%)") is "rgb(207, 47, 47)" PASS colorTest.parseColor("hsl(30, 62.5%, 50%)") is "rgb(207, 127, 47)" PASS colorTest.parseColor("hsl(60, 62.5%, 50%)") is "rgb(207, 207, 47)" -FAIL colorTest.parseColor("hsl(90, 62.5%, 50%)") should be rgb(127, 207, 47). Was rgb(128, 207, 47). +PASS colorTest.parseColor("hsl(90, 62.5%, 50%)") is "rgb(127, 207, 47)" PASS colorTest.parseColor("hsl(120, 62.5%, 50%)") is "rgb(47, 207, 47)" -FAIL colorTest.parseColor("hsl(150, 62.5%, 50%)") should be rgb(47, 207, 127). Was rgb(47, 207, 128). +PASS colorTest.parseColor("hsl(150, 62.5%, 50%)") is "rgb(47, 207, 127)" PASS colorTest.parseColor("hsl(180, 62.5%, 50%)") is "rgb(47, 207, 207)" PASS colorTest.parseColor("hsl(210, 62.5%, 50%)") is "rgb(47, 127, 207)" PASS colorTest.parseColor("hsl(240, 62.5%, 50%)") is "rgb(47, 47, 207)" PASS colorTest.parseColor("hsl(270, 62.5%, 50%)") is "rgb(127, 47, 207)" PASS colorTest.parseColor("hsl(300, 62.5%, 50%)") is "rgb(207, 47, 207)" -FAIL colorTest.parseColor("hsl(330, 62.5%, 50%)") should be rgb(207, 47, 127). Was rgb(207, 47, 128). +PASS colorTest.parseColor("hsl(330, 62.5%, 50%)") is "rgb(207, 47, 127)" PASS colorTest.parseColor("hsl(0, 75%, 50%)") is "rgb(223, 31, 31)" PASS colorTest.parseColor("hsl(30, 75%, 50%)") is "rgb(223, 127, 31)" PASS colorTest.parseColor("hsl(60, 75%, 50%)") is "rgb(223, 223, 31)" -FAIL colorTest.parseColor("hsl(90, 75%, 50%)") should be rgb(127, 223, 31). Was rgb(128, 223, 31). +PASS colorTest.parseColor("hsl(90, 75%, 50%)") is "rgb(127, 223, 31)" PASS colorTest.parseColor("hsl(120, 75%, 50%)") is "rgb(31, 223, 31)" -FAIL colorTest.parseColor("hsl(150, 75%, 50%)") should be rgb(31, 223, 127). Was rgb(31, 223, 128). +PASS colorTest.parseColor("hsl(150, 75%, 50%)") is "rgb(31, 223, 127)" PASS colorTest.parseColor("hsl(180, 75%, 50%)") is "rgb(31, 223, 223)" PASS colorTest.parseColor("hsl(210, 75%, 50%)") is "rgb(31, 127, 223)" PASS colorTest.parseColor("hsl(240, 75%, 50%)") is "rgb(31, 31, 223)" PASS colorTest.parseColor("hsl(270, 75%, 50%)") is "rgb(127, 31, 223)" PASS colorTest.parseColor("hsl(300, 75%, 50%)") is "rgb(223, 31, 223)" -FAIL colorTest.parseColor("hsl(330, 75%, 50%)") should be rgb(223, 31, 127). Was rgb(223, 31, 128). +PASS colorTest.parseColor("hsl(330, 75%, 50%)") is "rgb(223, 31, 127)" PASS colorTest.parseColor("hsl(0, 87.5%, 50%)") is "rgb(239, 15, 15)" PASS colorTest.parseColor("hsl(30, 87.5%, 50%)") is "rgb(239, 127, 15)" PASS colorTest.parseColor("hsl(60, 87.5%, 50%)") is "rgb(239, 239, 15)" -FAIL colorTest.parseColor("hsl(90, 87.5%, 50%)") should be rgb(127, 239, 15). Was rgb(128, 239, 15). +PASS colorTest.parseColor("hsl(90, 87.5%, 50%)") is "rgb(127, 239, 15)" PASS colorTest.parseColor("hsl(120, 87.5%, 50%)") is "rgb(15, 239, 15)" -FAIL colorTest.parseColor("hsl(150, 87.5%, 50%)") should be rgb(15, 239, 127). Was rgb(15, 239, 128). +PASS colorTest.parseColor("hsl(150, 87.5%, 50%)") is "rgb(15, 239, 127)" PASS colorTest.parseColor("hsl(180, 87.5%, 50%)") is "rgb(15, 239, 239)" PASS colorTest.parseColor("hsl(210, 87.5%, 50%)") is "rgb(15, 127, 239)" PASS colorTest.parseColor("hsl(240, 87.5%, 50%)") is "rgb(15, 15, 239)" PASS colorTest.parseColor("hsl(270, 87.5%, 50%)") is "rgb(127, 15, 239)" PASS colorTest.parseColor("hsl(300, 87.5%, 50%)") is "rgb(239, 15, 239)" -FAIL colorTest.parseColor("hsl(330, 87.5%, 50%)") should be rgb(239, 15, 127). Was rgb(239, 15, 128). +PASS colorTest.parseColor("hsl(330, 87.5%, 50%)") is "rgb(239, 15, 127)" PASS colorTest.parseColor("hsl(0, 100%, 50%)") is "rgb(255, 0, 0)" PASS colorTest.parseColor("hsl(30, 100%, 50%)") is "rgb(255, 127, 0)" PASS colorTest.parseColor("hsl(60, 100%, 50%)") is "rgb(255, 255, 0)" -FAIL colorTest.parseColor("hsl(90, 100%, 50%)") should be rgb(127, 255, 0). Was rgb(128, 255, 0). +PASS colorTest.parseColor("hsl(90, 100%, 50%)") is "rgb(127, 255, 0)" PASS colorTest.parseColor("hsl(120, 100%, 50%)") is "rgb(0, 255, 0)" -FAIL colorTest.parseColor("hsl(150, 100%, 50%)") should be rgb(0, 255, 127). Was rgb(0, 255, 128). +PASS colorTest.parseColor("hsl(150, 100%, 50%)") is "rgb(0, 255, 127)" PASS colorTest.parseColor("hsl(180, 100%, 50%)") is "rgb(0, 255, 255)" PASS colorTest.parseColor("hsl(210, 100%, 50%)") is "rgb(0, 127, 255)" PASS colorTest.parseColor("hsl(240, 100%, 50%)") is "rgb(0, 0, 255)" PASS colorTest.parseColor("hsl(270, 100%, 50%)") is "rgb(127, 0, 255)" PASS colorTest.parseColor("hsl(300, 100%, 50%)") is "rgb(255, 0, 255)" -FAIL colorTest.parseColor("hsl(330, 100%, 50%)") should be rgb(255, 0, 127). Was rgb(255, 0, 128). +PASS colorTest.parseColor("hsl(330, 100%, 50%)") is "rgb(255, 0, 127)" PASS colorTest.parseColor("hsl(0, 0%, 62.5%)") is "rgb(159, 159, 159)" PASS colorTest.parseColor("hsl(30, 0%, 62.5%)") is "rgb(159, 159, 159)" PASS colorTest.parseColor("hsl(60, 0%, 62.5%)") is "rgb(159, 159, 159)" @@ -595,63 +595,63 @@ PASS colorTest.parseColor("hsl(0, 50%, 62.5%)") is "rgb(207, 111, 111)" PASS colorTest.parseColor("hsl(30, 50%, 62.5%)") is "rgb(207, 159, 111)" PASS colorTest.parseColor("hsl(60, 50%, 62.5%)") is "rgb(207, 207, 111)" -FAIL colorTest.parseColor("hsl(90, 50%, 62.5%)") should be rgb(159, 207, 111). Was rgb(160, 207, 111). +PASS colorTest.parseColor("hsl(90, 50%, 62.5%)") is "rgb(159, 207, 111)" PASS colorTest.parseColor("hsl(120, 50%, 62.5%)") is "rgb(111, 207, 111)" -FAIL colorTest.parseColor("hsl(150, 50%, 62.5%)") should be rgb(111, 207, 159). Was rgb(111, 207, 160). +PASS colorTest.parseColor("hsl(150, 50%, 62.5%)") is "rgb(111, 207, 159)" PASS colorTest.parseColor("hsl(180, 50%, 62.5%)") is "rgb(111, 207, 207)" PASS colorTest.parseColor("hsl(210, 50%, 62.5%)") is "rgb(111, 159, 207)" PASS colorTest.parseColor("hsl(240, 50%, 62.5%)") is "rgb(111, 111, 207)" PASS colorTest.parseColor("hsl(270, 50%, 62.5%)") is "rgb(159, 111, 207)" PASS colorTest.parseColor("hsl(300, 50%, 62.5%)") is "rgb(207, 111, 207)" -FAIL colorTest.parseColor("hsl(330, 50%, 62.5%)") should be rgb(207, 111, 159). Was rgb(207, 111, 160). +PASS colorTest.parseColor("hsl(330, 50%, 62.5%)") is "rgb(207, 111, 159)" PASS colorTest.parseColor("hsl(0, 62.5%, 62.5%)") is "rgb(219, 99, 99)" PASS colorTest.parseColor("hsl(30, 62.5%, 62.5%)") is "rgb(219, 159, 99)" PASS colorTest.parseColor("hsl(60, 62.5%, 62.5%)") is "rgb(219, 219, 99)" -FAIL colorTest.parseColor("hsl(90, 62.5%, 62.5%)") should be rgb(159, 219, 99). Was rgb(160, 219, 99). +PASS colorTest.parseColor("hsl(90, 62.5%, 62.5%)") is "rgb(159, 219, 99)" PASS colorTest.parseColor("hsl(120, 62.5%, 62.5%)") is "rgb(99, 219, 99)" -FAIL colorTest.parseColor("hsl(150, 62.5%, 62.5%)") should be rgb(99, 219, 159). Was rgb(99, 219, 160). +PASS colorTest.parseColor("hsl(150, 62.5%, 62.5%)") is "rgb(99, 219, 159)" PASS colorTest.parseColor("hsl(180, 62.5%, 62.5%)") is "rgb(99, 219, 219)" PASS colorTest.parseColor("hsl(210, 62.5%, 62.5%)") is "rgb(99, 159, 219)" PASS colorTest.parseColor("hsl(240, 62.5%, 62.5%)") is "rgb(99, 99, 219)" PASS colorTest.parseColor("hsl(270, 62.5%, 62.5%)") is "rgb(159, 99, 219)" PASS colorTest.parseColor("hsl(300, 62.5%, 62.5%)") is "rgb(219, 99, 219)" -FAIL colorTest.parseColor("hsl(330, 62.5%, 62.5%)") should be rgb(219, 99, 159). Was rgb(219, 99, 160). +PASS colorTest.parseColor("hsl(330, 62.5%, 62.5%)") is "rgb(219, 99, 159)" PASS colorTest.parseColor("hsl(0, 75%, 62.5%)") is "rgb(231, 87, 87)" PASS colorTest.parseColor("hsl(30, 75%, 62.5%)") is "rgb(231, 159, 87)" PASS colorTest.parseColor("hsl(60, 75%, 62.5%)") is "rgb(231, 231, 87)" -FAIL colorTest.parseColor("hsl(90, 75%, 62.5%)") should be rgb(159, 231, 87). Was rgb(160, 231, 87). +PASS colorTest.parseColor("hsl(90, 75%, 62.5%)") is "rgb(159, 231, 87)" PASS colorTest.parseColor("hsl(120, 75%, 62.5%)") is "rgb(87, 231, 87)" -FAIL colorTest.parseColor("hsl(150, 75%, 62.5%)") should be rgb(87, 231, 159). Was rgb(87, 231, 160). +PASS colorTest.parseColor("hsl(150, 75%, 62.5%)") is "rgb(87, 231, 159)" PASS colorTest.parseColor("hsl(180, 75%, 62.5%)") is "rgb(87, 231, 231)" PASS colorTest.parseColor("hsl(210, 75%, 62.5%)") is "rgb(87, 159, 231)" PASS colorTest.parseColor("hsl(240, 75%, 62.5%)") is "rgb(87, 87, 231)" PASS colorTest.parseColor("hsl(270, 75%, 62.5%)") is "rgb(159, 87, 231)" PASS colorTest.parseColor("hsl(300, 75%, 62.5%)") is "rgb(231, 87, 231)" -FAIL colorTest.parseColor("hsl(330, 75%, 62.5%)") should be rgb(231, 87, 159). Was rgb(231, 87, 160). +PASS colorTest.parseColor("hsl(330, 75%, 62.5%)") is "rgb(231, 87, 159)" PASS colorTest.parseColor("hsl(0, 87.5%, 62.5%)") is "rgb(243, 75, 75)" PASS colorTest.parseColor("hsl(30, 87.5%, 62.5%)") is "rgb(243, 159, 75)" PASS colorTest.parseColor("hsl(60, 87.5%, 62.5%)") is "rgb(243, 243, 75)" -FAIL colorTest.parseColor("hsl(90, 87.5%, 62.5%)") should be rgb(159, 243, 75). Was rgb(160, 243, 75). +PASS colorTest.parseColor("hsl(90, 87.5%, 62.5%)") is "rgb(159, 243, 75)" PASS colorTest.parseColor("hsl(120, 87.5%, 62.5%)") is "rgb(75, 243, 75)" -FAIL colorTest.parseColor("hsl(150, 87.5%, 62.5%)") should be rgb(75, 243, 159). Was rgb(75, 243, 160). +PASS colorTest.parseColor("hsl(150, 87.5%, 62.5%)") is "rgb(75, 243, 159)" PASS colorTest.parseColor("hsl(180, 87.5%, 62.5%)") is "rgb(75, 243, 243)" PASS colorTest.parseColor("hsl(210, 87.5%, 62.5%)") is "rgb(75, 159, 243)" PASS colorTest.parseColor("hsl(240, 87.5%, 62.5%)") is "rgb(75, 75, 243)" PASS colorTest.parseColor("hsl(270, 87.5%, 62.5%)") is "rgb(159, 75, 243)" PASS colorTest.parseColor("hsl(300, 87.5%, 62.5%)") is "rgb(243, 75, 243)" -FAIL colorTest.parseColor("hsl(330, 87.5%, 62.5%)") should be rgb(243, 75, 159). Was rgb(243, 75, 160). +PASS colorTest.parseColor("hsl(330, 87.5%, 62.5%)") is "rgb(243, 75, 159)" PASS colorTest.parseColor("hsl(0, 100%, 62.5%)") is "rgb(255, 63, 63)" PASS colorTest.parseColor("hsl(30, 100%, 62.5%)") is "rgb(255, 159, 63)" PASS colorTest.parseColor("hsl(60, 100%, 62.5%)") is "rgb(255, 255, 63)" -FAIL colorTest.parseColor("hsl(90, 100%, 62.5%)") should be rgb(159, 255, 63). Was rgb(160, 255, 63). +PASS colorTest.parseColor("hsl(90, 100%, 62.5%)") is "rgb(159, 255, 63)" PASS colorTest.parseColor("hsl(120, 100%, 62.5%)") is "rgb(63, 255, 63)" -FAIL colorTest.parseColor("hsl(150, 100%, 62.5%)") should be rgb(63, 255, 159). Was rgb(63, 255, 160). +PASS colorTest.parseColor("hsl(150, 100%, 62.5%)") is "rgb(63, 255, 159)" PASS colorTest.parseColor("hsl(180, 100%, 62.5%)") is "rgb(63, 255, 255)" PASS colorTest.parseColor("hsl(210, 100%, 62.5%)") is "rgb(63, 159, 255)" PASS colorTest.parseColor("hsl(240, 100%, 62.5%)") is "rgb(63, 63, 255)" PASS colorTest.parseColor("hsl(270, 100%, 62.5%)") is "rgb(159, 63, 255)" PASS colorTest.parseColor("hsl(300, 100%, 62.5%)") is "rgb(255, 63, 255)" -FAIL colorTest.parseColor("hsl(330, 100%, 62.5%)") should be rgb(255, 63, 159). Was rgb(255, 63, 160). +PASS colorTest.parseColor("hsl(330, 100%, 62.5%)") is "rgb(255, 63, 159)" PASS colorTest.parseColor("hsl(0, 0%, 75%)") is "rgb(191, 191, 191)" PASS colorTest.parseColor("hsl(30, 0%, 75%)") is "rgb(191, 191, 191)" PASS colorTest.parseColor("hsl(60, 0%, 75%)") is "rgb(191, 191, 191)" @@ -727,39 +727,39 @@ PASS colorTest.parseColor("hsl(0, 75%, 75%)") is "rgb(239, 143, 143)" PASS colorTest.parseColor("hsl(30, 75%, 75%)") is "rgb(239, 191, 143)" PASS colorTest.parseColor("hsl(60, 75%, 75%)") is "rgb(239, 239, 143)" -FAIL colorTest.parseColor("hsl(90, 75%, 75%)") should be rgb(191, 239, 143). Was rgb(192, 239, 143). +PASS colorTest.parseColor("hsl(90, 75%, 75%)") is "rgb(191, 239, 143)" PASS colorTest.parseColor("hsl(120, 75%, 75%)") is "rgb(143, 239, 143)" -FAIL colorTest.parseColor("hsl(150, 75%, 75%)") should be rgb(143, 239, 191). Was rgb(143, 239, 192). +PASS colorTest.parseColor("hsl(150, 75%, 75%)") is "rgb(143, 239, 191)" PASS colorTest.parseColor("hsl(180, 75%, 75%)") is "rgb(143, 239, 239)" PASS colorTest.parseColor("hsl(210, 75%, 75%)") is "rgb(143, 191, 239)" PASS colorTest.parseColor("hsl(240, 75%, 75%)") is "rgb(143, 143, 239)" PASS colorTest.parseColor("hsl(270, 75%, 75%)") is "rgb(191, 143, 239)" PASS colorTest.parseColor("hsl(300, 75%, 75%)") is "rgb(239, 143, 239)" -FAIL colorTest.parseColor("hsl(330, 75%, 75%)") should be rgb(239, 143, 191). Was rgb(239, 143, 192). +PASS colorTest.parseColor("hsl(330, 75%, 75%)") is "rgb(239, 143, 191)" PASS colorTest.parseColor("hsl(0, 87.5%, 75%)") is "rgb(247, 135, 135)" PASS colorTest.parseColor("hsl(30, 87.5%, 75%)") is "rgb(247, 191, 135)" PASS colorTest.parseColor("hsl(60, 87.5%, 75%)") is "rgb(247, 247, 135)" -FAIL colorTest.parseColor("hsl(90, 87.5%, 75%)") should be rgb(191, 247, 135). Was rgb(192, 247, 135). +PASS colorTest.parseColor("hsl(90, 87.5%, 75%)") is "rgb(191, 247, 135)" PASS colorTest.parseColor("hsl(120, 87.5%, 75%)") is "rgb(135, 247, 135)" -FAIL colorTest.parseColor("hsl(150, 87.5%, 75%)") should be rgb(135, 247, 191). Was rgb(135, 247, 192). +PASS colorTest.parseColor("hsl(150, 87.5%, 75%)") is "rgb(135, 247, 191)" PASS colorTest.parseColor("hsl(180, 87.5%, 75%)") is "rgb(135, 247, 247)" PASS colorTest.parseColor("hsl(210, 87.5%, 75%)") is "rgb(135, 191, 247)" PASS colorTest.parseColor("hsl(240, 87.5%, 75%)") is "rgb(135, 135, 247)" PASS colorTest.parseColor("hsl(270, 87.5%, 75%)") is "rgb(191, 135, 247)" PASS colorTest.parseColor("hsl(300, 87.5%, 75%)") is "rgb(247, 135, 247)" -FAIL colorTest.parseColor("hsl(330, 87.5%, 75%)") should be rgb(247, 135, 191). Was rgb(247, 135, 192). +PASS colorTest.parseColor("hsl(330, 87.5%, 75%)") is "rgb(247, 135, 191)" PASS colorTest.parseColor("hsl(0, 100%, 75%)") is "rgb(255, 127, 127)" PASS colorTest.parseColor("hsl(30, 100%, 75%)") is "rgb(255, 191, 127)" PASS colorTest.parseColor("hsl(60, 100%, 75%)") is "rgb(255, 255, 127)" -FAIL colorTest.parseColor("hsl(90, 100%, 75%)") should be rgb(191, 255, 127). Was rgb(192, 255, 127). +PASS colorTest.parseColor("hsl(90, 100%, 75%)") is "rgb(191, 255, 127)" PASS colorTest.parseColor("hsl(120, 100%, 75%)") is "rgb(127, 255, 127)" -FAIL colorTest.parseColor("hsl(150, 100%, 75%)") should be rgb(127, 255, 191). Was rgb(127, 255, 192). +PASS colorTest.parseColor("hsl(150, 100%, 75%)") is "rgb(127, 255, 191)" PASS colorTest.parseColor("hsl(180, 100%, 75%)") is "rgb(127, 255, 255)" PASS colorTest.parseColor("hsl(210, 100%, 75%)") is "rgb(127, 191, 255)" PASS colorTest.parseColor("hsl(240, 100%, 75%)") is "rgb(127, 127, 255)" PASS colorTest.parseColor("hsl(270, 100%, 75%)") is "rgb(191, 127, 255)" PASS colorTest.parseColor("hsl(300, 100%, 75%)") is "rgb(255, 127, 255)" -FAIL colorTest.parseColor("hsl(330, 100%, 75%)") should be rgb(255, 127, 191). Was rgb(255, 127, 192). +PASS colorTest.parseColor("hsl(330, 100%, 75%)") is "rgb(255, 127, 191)" PASS colorTest.parseColor("hsl(0, 0%, 87.5%)") is "rgb(223, 223, 223)" PASS colorTest.parseColor("hsl(30, 0%, 87.5%)") is "rgb(223, 223, 223)" PASS colorTest.parseColor("hsl(60, 0%, 87.5%)") is "rgb(223, 223, 223)"
diff --git a/third_party/WebKit/LayoutTests/css-parser/color3_hsla_1-expected.txt b/third_party/WebKit/LayoutTests/css-parser/color3_hsla_1-expected.txt index 2cf0671..ec0b49a 100644 --- a/third_party/WebKit/LayoutTests/css-parser/color3_hsla_1-expected.txt +++ b/third_party/WebKit/LayoutTests/css-parser/color3_hsla_1-expected.txt
@@ -151,75 +151,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 12.5%, 1)") is "rgb(43, 19, 19)" PASS colorTest.parseColor("hsla(30, 37.5%, 12.5%, 1)") is "rgb(43, 31, 19)" PASS colorTest.parseColor("hsla(60, 37.5%, 12.5%, 1)") is "rgb(43, 43, 19)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 12.5%, 1)") should be rgb(31, 43, 19). Was rgb(32, 43, 19). +PASS colorTest.parseColor("hsla(90, 37.5%, 12.5%, 1)") is "rgb(31, 43, 19)" PASS colorTest.parseColor("hsla(120, 37.5%, 12.5%, 1)") is "rgb(19, 43, 19)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 12.5%, 1)") should be rgb(19, 43, 31). Was rgb(19, 43, 32). +PASS colorTest.parseColor("hsla(150, 37.5%, 12.5%, 1)") is "rgb(19, 43, 31)" PASS colorTest.parseColor("hsla(180, 37.5%, 12.5%, 1)") is "rgb(19, 43, 43)" PASS colorTest.parseColor("hsla(210, 37.5%, 12.5%, 1)") is "rgb(19, 31, 43)" PASS colorTest.parseColor("hsla(240, 37.5%, 12.5%, 1)") is "rgb(19, 19, 43)" PASS colorTest.parseColor("hsla(270, 37.5%, 12.5%, 1)") is "rgb(31, 19, 43)" PASS colorTest.parseColor("hsla(300, 37.5%, 12.5%, 1)") is "rgb(43, 19, 43)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 12.5%, 1)") should be rgb(43, 19, 31). Was rgb(43, 19, 32). +PASS colorTest.parseColor("hsla(330, 37.5%, 12.5%, 1)") is "rgb(43, 19, 31)" PASS colorTest.parseColor("hsla(0, 50%, 12.5%, 1)") is "rgb(47, 15, 15)" PASS colorTest.parseColor("hsla(30, 50%, 12.5%, 1)") is "rgb(47, 31, 15)" PASS colorTest.parseColor("hsla(60, 50%, 12.5%, 1)") is "rgb(47, 47, 15)" -FAIL colorTest.parseColor("hsla(90, 50%, 12.5%, 1)") should be rgb(31, 47, 15). Was rgb(32, 47, 15). +PASS colorTest.parseColor("hsla(90, 50%, 12.5%, 1)") is "rgb(31, 47, 15)" PASS colorTest.parseColor("hsla(120, 50%, 12.5%, 1)") is "rgb(15, 47, 15)" -FAIL colorTest.parseColor("hsla(150, 50%, 12.5%, 1)") should be rgb(15, 47, 31). Was rgb(15, 47, 32). +PASS colorTest.parseColor("hsla(150, 50%, 12.5%, 1)") is "rgb(15, 47, 31)" PASS colorTest.parseColor("hsla(180, 50%, 12.5%, 1)") is "rgb(15, 47, 47)" PASS colorTest.parseColor("hsla(210, 50%, 12.5%, 1)") is "rgb(15, 31, 47)" PASS colorTest.parseColor("hsla(240, 50%, 12.5%, 1)") is "rgb(15, 15, 47)" PASS colorTest.parseColor("hsla(270, 50%, 12.5%, 1)") is "rgb(31, 15, 47)" PASS colorTest.parseColor("hsla(300, 50%, 12.5%, 1)") is "rgb(47, 15, 47)" -FAIL colorTest.parseColor("hsla(330, 50%, 12.5%, 1)") should be rgb(47, 15, 31). Was rgb(47, 15, 32). +PASS colorTest.parseColor("hsla(330, 50%, 12.5%, 1)") is "rgb(47, 15, 31)" PASS colorTest.parseColor("hsla(0, 62.5%, 12.5%, 1)") is "rgb(51, 11, 11)" PASS colorTest.parseColor("hsla(30, 62.5%, 12.5%, 1)") is "rgb(51, 31, 11)" PASS colorTest.parseColor("hsla(60, 62.5%, 12.5%, 1)") is "rgb(51, 51, 11)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 12.5%, 1)") should be rgb(31, 51, 11). Was rgb(32, 51, 11). +PASS colorTest.parseColor("hsla(90, 62.5%, 12.5%, 1)") is "rgb(31, 51, 11)" PASS colorTest.parseColor("hsla(120, 62.5%, 12.5%, 1)") is "rgb(11, 51, 11)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 12.5%, 1)") should be rgb(11, 51, 31). Was rgb(11, 51, 32). +PASS colorTest.parseColor("hsla(150, 62.5%, 12.5%, 1)") is "rgb(11, 51, 31)" PASS colorTest.parseColor("hsla(180, 62.5%, 12.5%, 1)") is "rgb(11, 51, 51)" PASS colorTest.parseColor("hsla(210, 62.5%, 12.5%, 1)") is "rgb(11, 31, 51)" PASS colorTest.parseColor("hsla(240, 62.5%, 12.5%, 1)") is "rgb(11, 11, 51)" PASS colorTest.parseColor("hsla(270, 62.5%, 12.5%, 1)") is "rgb(31, 11, 51)" PASS colorTest.parseColor("hsla(300, 62.5%, 12.5%, 1)") is "rgb(51, 11, 51)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 12.5%, 1)") should be rgb(51, 11, 31). Was rgb(51, 11, 32). +PASS colorTest.parseColor("hsla(330, 62.5%, 12.5%, 1)") is "rgb(51, 11, 31)" PASS colorTest.parseColor("hsla(0, 75%, 12.5%, 1)") is "rgb(55, 7, 7)" PASS colorTest.parseColor("hsla(30, 75%, 12.5%, 1)") is "rgb(55, 31, 7)" PASS colorTest.parseColor("hsla(60, 75%, 12.5%, 1)") is "rgb(55, 55, 7)" -FAIL colorTest.parseColor("hsla(90, 75%, 12.5%, 1)") should be rgb(31, 55, 7). Was rgb(32, 55, 7). +PASS colorTest.parseColor("hsla(90, 75%, 12.5%, 1)") is "rgb(31, 55, 7)" PASS colorTest.parseColor("hsla(120, 75%, 12.5%, 1)") is "rgb(7, 55, 7)" -FAIL colorTest.parseColor("hsla(150, 75%, 12.5%, 1)") should be rgb(7, 55, 31). Was rgb(7, 55, 32). +PASS colorTest.parseColor("hsla(150, 75%, 12.5%, 1)") is "rgb(7, 55, 31)" PASS colorTest.parseColor("hsla(180, 75%, 12.5%, 1)") is "rgb(7, 55, 55)" PASS colorTest.parseColor("hsla(210, 75%, 12.5%, 1)") is "rgb(7, 31, 55)" PASS colorTest.parseColor("hsla(240, 75%, 12.5%, 1)") is "rgb(7, 7, 55)" PASS colorTest.parseColor("hsla(270, 75%, 12.5%, 1)") is "rgb(31, 7, 55)" PASS colorTest.parseColor("hsla(300, 75%, 12.5%, 1)") is "rgb(55, 7, 55)" -FAIL colorTest.parseColor("hsla(330, 75%, 12.5%, 1)") should be rgb(55, 7, 31). Was rgb(55, 7, 32). +PASS colorTest.parseColor("hsla(330, 75%, 12.5%, 1)") is "rgb(55, 7, 31)" PASS colorTest.parseColor("hsla(0, 87.5%, 12.5%, 1)") is "rgb(59, 3, 3)" PASS colorTest.parseColor("hsla(30, 87.5%, 12.5%, 1)") is "rgb(59, 31, 3)" PASS colorTest.parseColor("hsla(60, 87.5%, 12.5%, 1)") is "rgb(59, 59, 3)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 12.5%, 1)") should be rgb(31, 59, 3). Was rgb(32, 59, 3). +PASS colorTest.parseColor("hsla(90, 87.5%, 12.5%, 1)") is "rgb(31, 59, 3)" PASS colorTest.parseColor("hsla(120, 87.5%, 12.5%, 1)") is "rgb(3, 59, 3)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 12.5%, 1)") should be rgb(3, 59, 31). Was rgb(3, 59, 32). +PASS colorTest.parseColor("hsla(150, 87.5%, 12.5%, 1)") is "rgb(3, 59, 31)" PASS colorTest.parseColor("hsla(180, 87.5%, 12.5%, 1)") is "rgb(3, 59, 59)" PASS colorTest.parseColor("hsla(210, 87.5%, 12.5%, 1)") is "rgb(3, 31, 59)" PASS colorTest.parseColor("hsla(240, 87.5%, 12.5%, 1)") is "rgb(3, 3, 59)" PASS colorTest.parseColor("hsla(270, 87.5%, 12.5%, 1)") is "rgb(31, 3, 59)" PASS colorTest.parseColor("hsla(300, 87.5%, 12.5%, 1)") is "rgb(59, 3, 59)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 12.5%, 1)") should be rgb(59, 3, 31). Was rgb(59, 3, 32). +PASS colorTest.parseColor("hsla(330, 87.5%, 12.5%, 1)") is "rgb(59, 3, 31)" PASS colorTest.parseColor("hsla(0, 100%, 12.5%, 1)") is "rgb(63, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 12.5%, 1)") is "rgb(63, 31, 0)" PASS colorTest.parseColor("hsla(60, 100%, 12.5%, 1)") is "rgb(63, 63, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 12.5%, 1)") should be rgb(31, 63, 0). Was rgb(32, 63, 0). +PASS colorTest.parseColor("hsla(90, 100%, 12.5%, 1)") is "rgb(31, 63, 0)" PASS colorTest.parseColor("hsla(120, 100%, 12.5%, 1)") is "rgb(0, 63, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 12.5%, 1)") should be rgb(0, 63, 31). Was rgb(0, 63, 32). +PASS colorTest.parseColor("hsla(150, 100%, 12.5%, 1)") is "rgb(0, 63, 31)" PASS colorTest.parseColor("hsla(180, 100%, 12.5%, 1)") is "rgb(0, 63, 63)" PASS colorTest.parseColor("hsla(210, 100%, 12.5%, 1)") is "rgb(0, 31, 63)" PASS colorTest.parseColor("hsla(240, 100%, 12.5%, 1)") is "rgb(0, 0, 63)" PASS colorTest.parseColor("hsla(270, 100%, 12.5%, 1)") is "rgb(31, 0, 63)" PASS colorTest.parseColor("hsla(300, 100%, 12.5%, 1)") is "rgb(63, 0, 63)" -FAIL colorTest.parseColor("hsla(330, 100%, 12.5%, 1)") should be rgb(63, 0, 31). Was rgb(63, 0, 32). +PASS colorTest.parseColor("hsla(330, 100%, 12.5%, 1)") is "rgb(63, 0, 31)" PASS colorTest.parseColor("hsla(0, 0%, 25%, 1)") is "rgb(63, 63, 63)" PASS colorTest.parseColor("hsla(30, 0%, 25%, 1)") is "rgb(63, 63, 63)" PASS colorTest.parseColor("hsla(60, 0%, 25%, 1)") is "rgb(63, 63, 63)" @@ -259,75 +259,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 25%, 1)") is "rgb(87, 39, 39)" PASS colorTest.parseColor("hsla(30, 37.5%, 25%, 1)") is "rgb(87, 63, 39)" PASS colorTest.parseColor("hsla(60, 37.5%, 25%, 1)") is "rgb(87, 87, 39)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 25%, 1)") should be rgb(63, 87, 39). Was rgb(64, 87, 39). +PASS colorTest.parseColor("hsla(90, 37.5%, 25%, 1)") is "rgb(63, 87, 39)" PASS colorTest.parseColor("hsla(120, 37.5%, 25%, 1)") is "rgb(39, 87, 39)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 25%, 1)") should be rgb(39, 87, 63). Was rgb(39, 87, 64). +PASS colorTest.parseColor("hsla(150, 37.5%, 25%, 1)") is "rgb(39, 87, 63)" PASS colorTest.parseColor("hsla(180, 37.5%, 25%, 1)") is "rgb(39, 87, 87)" PASS colorTest.parseColor("hsla(210, 37.5%, 25%, 1)") is "rgb(39, 63, 87)" PASS colorTest.parseColor("hsla(240, 37.5%, 25%, 1)") is "rgb(39, 39, 87)" PASS colorTest.parseColor("hsla(270, 37.5%, 25%, 1)") is "rgb(63, 39, 87)" PASS colorTest.parseColor("hsla(300, 37.5%, 25%, 1)") is "rgb(87, 39, 87)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 25%, 1)") should be rgb(87, 39, 63). Was rgb(87, 39, 64). +PASS colorTest.parseColor("hsla(330, 37.5%, 25%, 1)") is "rgb(87, 39, 63)" PASS colorTest.parseColor("hsla(0, 50%, 25%, 1)") is "rgb(95, 31, 31)" PASS colorTest.parseColor("hsla(30, 50%, 25%, 1)") is "rgb(95, 63, 31)" PASS colorTest.parseColor("hsla(60, 50%, 25%, 1)") is "rgb(95, 95, 31)" -FAIL colorTest.parseColor("hsla(90, 50%, 25%, 1)") should be rgb(63, 95, 31). Was rgb(64, 95, 31). +PASS colorTest.parseColor("hsla(90, 50%, 25%, 1)") is "rgb(63, 95, 31)" PASS colorTest.parseColor("hsla(120, 50%, 25%, 1)") is "rgb(31, 95, 31)" -FAIL colorTest.parseColor("hsla(150, 50%, 25%, 1)") should be rgb(31, 95, 63). Was rgb(31, 95, 64). +PASS colorTest.parseColor("hsla(150, 50%, 25%, 1)") is "rgb(31, 95, 63)" PASS colorTest.parseColor("hsla(180, 50%, 25%, 1)") is "rgb(31, 95, 95)" PASS colorTest.parseColor("hsla(210, 50%, 25%, 1)") is "rgb(31, 63, 95)" PASS colorTest.parseColor("hsla(240, 50%, 25%, 1)") is "rgb(31, 31, 95)" PASS colorTest.parseColor("hsla(270, 50%, 25%, 1)") is "rgb(63, 31, 95)" PASS colorTest.parseColor("hsla(300, 50%, 25%, 1)") is "rgb(95, 31, 95)" -FAIL colorTest.parseColor("hsla(330, 50%, 25%, 1)") should be rgb(95, 31, 63). Was rgb(95, 31, 64). +PASS colorTest.parseColor("hsla(330, 50%, 25%, 1)") is "rgb(95, 31, 63)" PASS colorTest.parseColor("hsla(0, 62.5%, 25%, 1)") is "rgb(103, 23, 23)" PASS colorTest.parseColor("hsla(30, 62.5%, 25%, 1)") is "rgb(103, 63, 23)" PASS colorTest.parseColor("hsla(60, 62.5%, 25%, 1)") is "rgb(103, 103, 23)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 25%, 1)") should be rgb(63, 103, 23). Was rgb(64, 103, 23). +PASS colorTest.parseColor("hsla(90, 62.5%, 25%, 1)") is "rgb(63, 103, 23)" PASS colorTest.parseColor("hsla(120, 62.5%, 25%, 1)") is "rgb(23, 103, 23)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 25%, 1)") should be rgb(23, 103, 63). Was rgb(23, 103, 64). +PASS colorTest.parseColor("hsla(150, 62.5%, 25%, 1)") is "rgb(23, 103, 63)" PASS colorTest.parseColor("hsla(180, 62.5%, 25%, 1)") is "rgb(23, 103, 103)" PASS colorTest.parseColor("hsla(210, 62.5%, 25%, 1)") is "rgb(23, 63, 103)" PASS colorTest.parseColor("hsla(240, 62.5%, 25%, 1)") is "rgb(23, 23, 103)" PASS colorTest.parseColor("hsla(270, 62.5%, 25%, 1)") is "rgb(63, 23, 103)" PASS colorTest.parseColor("hsla(300, 62.5%, 25%, 1)") is "rgb(103, 23, 103)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 25%, 1)") should be rgb(103, 23, 63). Was rgb(103, 23, 64). +PASS colorTest.parseColor("hsla(330, 62.5%, 25%, 1)") is "rgb(103, 23, 63)" PASS colorTest.parseColor("hsla(0, 75%, 25%, 1)") is "rgb(111, 15, 15)" PASS colorTest.parseColor("hsla(30, 75%, 25%, 1)") is "rgb(111, 63, 15)" PASS colorTest.parseColor("hsla(60, 75%, 25%, 1)") is "rgb(111, 111, 15)" -FAIL colorTest.parseColor("hsla(90, 75%, 25%, 1)") should be rgb(63, 111, 15). Was rgb(64, 111, 15). +PASS colorTest.parseColor("hsla(90, 75%, 25%, 1)") is "rgb(63, 111, 15)" PASS colorTest.parseColor("hsla(120, 75%, 25%, 1)") is "rgb(15, 111, 15)" -FAIL colorTest.parseColor("hsla(150, 75%, 25%, 1)") should be rgb(15, 111, 63). Was rgb(15, 111, 64). +PASS colorTest.parseColor("hsla(150, 75%, 25%, 1)") is "rgb(15, 111, 63)" PASS colorTest.parseColor("hsla(180, 75%, 25%, 1)") is "rgb(15, 111, 111)" PASS colorTest.parseColor("hsla(210, 75%, 25%, 1)") is "rgb(15, 63, 111)" PASS colorTest.parseColor("hsla(240, 75%, 25%, 1)") is "rgb(15, 15, 111)" PASS colorTest.parseColor("hsla(270, 75%, 25%, 1)") is "rgb(63, 15, 111)" PASS colorTest.parseColor("hsla(300, 75%, 25%, 1)") is "rgb(111, 15, 111)" -FAIL colorTest.parseColor("hsla(330, 75%, 25%, 1)") should be rgb(111, 15, 63). Was rgb(111, 15, 64). +PASS colorTest.parseColor("hsla(330, 75%, 25%, 1)") is "rgb(111, 15, 63)" PASS colorTest.parseColor("hsla(0, 87.5%, 25%, 1)") is "rgb(119, 7, 7)" PASS colorTest.parseColor("hsla(30, 87.5%, 25%, 1)") is "rgb(119, 63, 7)" PASS colorTest.parseColor("hsla(60, 87.5%, 25%, 1)") is "rgb(119, 119, 7)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 25%, 1)") should be rgb(63, 119, 7). Was rgb(64, 119, 7). +PASS colorTest.parseColor("hsla(90, 87.5%, 25%, 1)") is "rgb(63, 119, 7)" PASS colorTest.parseColor("hsla(120, 87.5%, 25%, 1)") is "rgb(7, 119, 7)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 25%, 1)") should be rgb(7, 119, 63). Was rgb(7, 119, 64). +PASS colorTest.parseColor("hsla(150, 87.5%, 25%, 1)") is "rgb(7, 119, 63)" PASS colorTest.parseColor("hsla(180, 87.5%, 25%, 1)") is "rgb(7, 119, 119)" PASS colorTest.parseColor("hsla(210, 87.5%, 25%, 1)") is "rgb(7, 63, 119)" PASS colorTest.parseColor("hsla(240, 87.5%, 25%, 1)") is "rgb(7, 7, 119)" PASS colorTest.parseColor("hsla(270, 87.5%, 25%, 1)") is "rgb(63, 7, 119)" PASS colorTest.parseColor("hsla(300, 87.5%, 25%, 1)") is "rgb(119, 7, 119)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 25%, 1)") should be rgb(119, 7, 63). Was rgb(119, 7, 64). +PASS colorTest.parseColor("hsla(330, 87.5%, 25%, 1)") is "rgb(119, 7, 63)" PASS colorTest.parseColor("hsla(0, 100%, 25%, 1)") is "rgb(127, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 25%, 1)") is "rgb(127, 63, 0)" PASS colorTest.parseColor("hsla(60, 100%, 25%, 1)") is "rgb(127, 127, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 25%, 1)") should be rgb(63, 127, 0). Was rgb(64, 127, 0). +PASS colorTest.parseColor("hsla(90, 100%, 25%, 1)") is "rgb(63, 127, 0)" PASS colorTest.parseColor("hsla(120, 100%, 25%, 1)") is "rgb(0, 127, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 25%, 1)") should be rgb(0, 127, 63). Was rgb(0, 127, 64). +PASS colorTest.parseColor("hsla(150, 100%, 25%, 1)") is "rgb(0, 127, 63)" PASS colorTest.parseColor("hsla(180, 100%, 25%, 1)") is "rgb(0, 127, 127)" PASS colorTest.parseColor("hsla(210, 100%, 25%, 1)") is "rgb(0, 63, 127)" PASS colorTest.parseColor("hsla(240, 100%, 25%, 1)") is "rgb(0, 0, 127)" PASS colorTest.parseColor("hsla(270, 100%, 25%, 1)") is "rgb(63, 0, 127)" PASS colorTest.parseColor("hsla(300, 100%, 25%, 1)") is "rgb(127, 0, 127)" -FAIL colorTest.parseColor("hsla(330, 100%, 25%, 1)") should be rgb(127, 0, 63). Was rgb(127, 0, 64). +PASS colorTest.parseColor("hsla(330, 100%, 25%, 1)") is "rgb(127, 0, 63)" PASS colorTest.parseColor("hsla(0, 0%, 37.5%, 1)") is "rgb(95, 95, 95)" PASS colorTest.parseColor("hsla(30, 0%, 37.5%, 1)") is "rgb(95, 95, 95)" PASS colorTest.parseColor("hsla(60, 0%, 37.5%, 1)") is "rgb(95, 95, 95)" @@ -355,87 +355,87 @@ PASS colorTest.parseColor("hsla(0, 25%, 37.5%, 1)") is "rgb(119, 71, 71)" PASS colorTest.parseColor("hsla(30, 25%, 37.5%, 1)") is "rgb(119, 95, 71)" PASS colorTest.parseColor("hsla(60, 25%, 37.5%, 1)") is "rgb(119, 119, 71)" -FAIL colorTest.parseColor("hsla(90, 25%, 37.5%, 1)") should be rgb(95, 119, 71). Was rgb(96, 119, 71). +PASS colorTest.parseColor("hsla(90, 25%, 37.5%, 1)") is "rgb(95, 119, 71)" PASS colorTest.parseColor("hsla(120, 25%, 37.5%, 1)") is "rgb(71, 119, 71)" -FAIL colorTest.parseColor("hsla(150, 25%, 37.5%, 1)") should be rgb(71, 119, 95). Was rgb(71, 119, 96). +PASS colorTest.parseColor("hsla(150, 25%, 37.5%, 1)") is "rgb(71, 119, 95)" PASS colorTest.parseColor("hsla(180, 25%, 37.5%, 1)") is "rgb(71, 119, 119)" PASS colorTest.parseColor("hsla(210, 25%, 37.5%, 1)") is "rgb(71, 95, 119)" PASS colorTest.parseColor("hsla(240, 25%, 37.5%, 1)") is "rgb(71, 71, 119)" PASS colorTest.parseColor("hsla(270, 25%, 37.5%, 1)") is "rgb(95, 71, 119)" PASS colorTest.parseColor("hsla(300, 25%, 37.5%, 1)") is "rgb(119, 71, 119)" -FAIL colorTest.parseColor("hsla(330, 25%, 37.5%, 1)") should be rgb(119, 71, 95). Was rgb(119, 71, 96). +PASS colorTest.parseColor("hsla(330, 25%, 37.5%, 1)") is "rgb(119, 71, 95)" PASS colorTest.parseColor("hsla(0, 37.5%, 37.5%, 1)") is "rgb(131, 59, 59)" PASS colorTest.parseColor("hsla(30, 37.5%, 37.5%, 1)") is "rgb(131, 95, 59)" PASS colorTest.parseColor("hsla(60, 37.5%, 37.5%, 1)") is "rgb(131, 131, 59)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 37.5%, 1)") should be rgb(95, 131, 59). Was rgb(96, 131, 59). +PASS colorTest.parseColor("hsla(90, 37.5%, 37.5%, 1)") is "rgb(95, 131, 59)" PASS colorTest.parseColor("hsla(120, 37.5%, 37.5%, 1)") is "rgb(59, 131, 59)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 37.5%, 1)") should be rgb(59, 131, 95). Was rgb(59, 131, 96). +PASS colorTest.parseColor("hsla(150, 37.5%, 37.5%, 1)") is "rgb(59, 131, 95)" PASS colorTest.parseColor("hsla(180, 37.5%, 37.5%, 1)") is "rgb(59, 131, 131)" PASS colorTest.parseColor("hsla(210, 37.5%, 37.5%, 1)") is "rgb(59, 95, 131)" PASS colorTest.parseColor("hsla(240, 37.5%, 37.5%, 1)") is "rgb(59, 59, 131)" PASS colorTest.parseColor("hsla(270, 37.5%, 37.5%, 1)") is "rgb(95, 59, 131)" PASS colorTest.parseColor("hsla(300, 37.5%, 37.5%, 1)") is "rgb(131, 59, 131)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 37.5%, 1)") should be rgb(131, 59, 95). Was rgb(131, 59, 96). +PASS colorTest.parseColor("hsla(330, 37.5%, 37.5%, 1)") is "rgb(131, 59, 95)" PASS colorTest.parseColor("hsla(0, 50%, 37.5%, 1)") is "rgb(143, 47, 47)" PASS colorTest.parseColor("hsla(30, 50%, 37.5%, 1)") is "rgb(143, 95, 47)" PASS colorTest.parseColor("hsla(60, 50%, 37.5%, 1)") is "rgb(143, 143, 47)" -FAIL colorTest.parseColor("hsla(90, 50%, 37.5%, 1)") should be rgb(95, 143, 47). Was rgb(96, 143, 47). +PASS colorTest.parseColor("hsla(90, 50%, 37.5%, 1)") is "rgb(95, 143, 47)" PASS colorTest.parseColor("hsla(120, 50%, 37.5%, 1)") is "rgb(47, 143, 47)" -FAIL colorTest.parseColor("hsla(150, 50%, 37.5%, 1)") should be rgb(47, 143, 95). Was rgb(47, 143, 96). +PASS colorTest.parseColor("hsla(150, 50%, 37.5%, 1)") is "rgb(47, 143, 95)" PASS colorTest.parseColor("hsla(180, 50%, 37.5%, 1)") is "rgb(47, 143, 143)" PASS colorTest.parseColor("hsla(210, 50%, 37.5%, 1)") is "rgb(47, 95, 143)" PASS colorTest.parseColor("hsla(240, 50%, 37.5%, 1)") is "rgb(47, 47, 143)" PASS colorTest.parseColor("hsla(270, 50%, 37.5%, 1)") is "rgb(95, 47, 143)" PASS colorTest.parseColor("hsla(300, 50%, 37.5%, 1)") is "rgb(143, 47, 143)" -FAIL colorTest.parseColor("hsla(330, 50%, 37.5%, 1)") should be rgb(143, 47, 95). Was rgb(143, 47, 96). +PASS colorTest.parseColor("hsla(330, 50%, 37.5%, 1)") is "rgb(143, 47, 95)" PASS colorTest.parseColor("hsla(0, 62.5%, 37.5%, 1)") is "rgb(155, 35, 35)" PASS colorTest.parseColor("hsla(30, 62.5%, 37.5%, 1)") is "rgb(155, 95, 35)" PASS colorTest.parseColor("hsla(60, 62.5%, 37.5%, 1)") is "rgb(155, 155, 35)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 37.5%, 1)") should be rgb(95, 155, 35). Was rgb(96, 155, 35). +PASS colorTest.parseColor("hsla(90, 62.5%, 37.5%, 1)") is "rgb(95, 155, 35)" PASS colorTest.parseColor("hsla(120, 62.5%, 37.5%, 1)") is "rgb(35, 155, 35)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 37.5%, 1)") should be rgb(35, 155, 95). Was rgb(35, 155, 96). +PASS colorTest.parseColor("hsla(150, 62.5%, 37.5%, 1)") is "rgb(35, 155, 95)" PASS colorTest.parseColor("hsla(180, 62.5%, 37.5%, 1)") is "rgb(35, 155, 155)" PASS colorTest.parseColor("hsla(210, 62.5%, 37.5%, 1)") is "rgb(35, 95, 155)" PASS colorTest.parseColor("hsla(240, 62.5%, 37.5%, 1)") is "rgb(35, 35, 155)" PASS colorTest.parseColor("hsla(270, 62.5%, 37.5%, 1)") is "rgb(95, 35, 155)" PASS colorTest.parseColor("hsla(300, 62.5%, 37.5%, 1)") is "rgb(155, 35, 155)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 37.5%, 1)") should be rgb(155, 35, 95). Was rgb(155, 35, 96). +PASS colorTest.parseColor("hsla(330, 62.5%, 37.5%, 1)") is "rgb(155, 35, 95)" PASS colorTest.parseColor("hsla(0, 75%, 37.5%, 1)") is "rgb(167, 23, 23)" PASS colorTest.parseColor("hsla(30, 75%, 37.5%, 1)") is "rgb(167, 95, 23)" PASS colorTest.parseColor("hsla(60, 75%, 37.5%, 1)") is "rgb(167, 167, 23)" -FAIL colorTest.parseColor("hsla(90, 75%, 37.5%, 1)") should be rgb(95, 167, 23). Was rgb(96, 167, 23). +PASS colorTest.parseColor("hsla(90, 75%, 37.5%, 1)") is "rgb(95, 167, 23)" PASS colorTest.parseColor("hsla(120, 75%, 37.5%, 1)") is "rgb(23, 167, 23)" -FAIL colorTest.parseColor("hsla(150, 75%, 37.5%, 1)") should be rgb(23, 167, 95). Was rgb(23, 167, 96). +PASS colorTest.parseColor("hsla(150, 75%, 37.5%, 1)") is "rgb(23, 167, 95)" PASS colorTest.parseColor("hsla(180, 75%, 37.5%, 1)") is "rgb(23, 167, 167)" PASS colorTest.parseColor("hsla(210, 75%, 37.5%, 1)") is "rgb(23, 95, 167)" PASS colorTest.parseColor("hsla(240, 75%, 37.5%, 1)") is "rgb(23, 23, 167)" PASS colorTest.parseColor("hsla(270, 75%, 37.5%, 1)") is "rgb(95, 23, 167)" PASS colorTest.parseColor("hsla(300, 75%, 37.5%, 1)") is "rgb(167, 23, 167)" -FAIL colorTest.parseColor("hsla(330, 75%, 37.5%, 1)") should be rgb(167, 23, 95). Was rgb(167, 23, 96). +PASS colorTest.parseColor("hsla(330, 75%, 37.5%, 1)") is "rgb(167, 23, 95)" PASS colorTest.parseColor("hsla(0, 87.5%, 37.5%, 1)") is "rgb(179, 11, 11)" PASS colorTest.parseColor("hsla(30, 87.5%, 37.5%, 1)") is "rgb(179, 95, 11)" PASS colorTest.parseColor("hsla(60, 87.5%, 37.5%, 1)") is "rgb(179, 179, 11)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 37.5%, 1)") should be rgb(95, 179, 11). Was rgb(96, 179, 11). +PASS colorTest.parseColor("hsla(90, 87.5%, 37.5%, 1)") is "rgb(95, 179, 11)" PASS colorTest.parseColor("hsla(120, 87.5%, 37.5%, 1)") is "rgb(11, 179, 11)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 37.5%, 1)") should be rgb(11, 179, 95). Was rgb(11, 179, 96). +PASS colorTest.parseColor("hsla(150, 87.5%, 37.5%, 1)") is "rgb(11, 179, 95)" PASS colorTest.parseColor("hsla(180, 87.5%, 37.5%, 1)") is "rgb(11, 179, 179)" PASS colorTest.parseColor("hsla(210, 87.5%, 37.5%, 1)") is "rgb(11, 95, 179)" PASS colorTest.parseColor("hsla(240, 87.5%, 37.5%, 1)") is "rgb(11, 11, 179)" PASS colorTest.parseColor("hsla(270, 87.5%, 37.5%, 1)") is "rgb(95, 11, 179)" PASS colorTest.parseColor("hsla(300, 87.5%, 37.5%, 1)") is "rgb(179, 11, 179)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 37.5%, 1)") should be rgb(179, 11, 95). Was rgb(179, 11, 96). +PASS colorTest.parseColor("hsla(330, 87.5%, 37.5%, 1)") is "rgb(179, 11, 95)" PASS colorTest.parseColor("hsla(0, 100%, 37.5%, 1)") is "rgb(191, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 37.5%, 1)") is "rgb(191, 95, 0)" PASS colorTest.parseColor("hsla(60, 100%, 37.5%, 1)") is "rgb(191, 191, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 37.5%, 1)") should be rgb(95, 191, 0). Was rgb(96, 191, 0). +PASS colorTest.parseColor("hsla(90, 100%, 37.5%, 1)") is "rgb(95, 191, 0)" PASS colorTest.parseColor("hsla(120, 100%, 37.5%, 1)") is "rgb(0, 191, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 37.5%, 1)") should be rgb(0, 191, 95). Was rgb(0, 191, 96). +PASS colorTest.parseColor("hsla(150, 100%, 37.5%, 1)") is "rgb(0, 191, 95)" PASS colorTest.parseColor("hsla(180, 100%, 37.5%, 1)") is "rgb(0, 191, 191)" PASS colorTest.parseColor("hsla(210, 100%, 37.5%, 1)") is "rgb(0, 95, 191)" PASS colorTest.parseColor("hsla(240, 100%, 37.5%, 1)") is "rgb(0, 0, 191)" PASS colorTest.parseColor("hsla(270, 100%, 37.5%, 1)") is "rgb(95, 0, 191)" PASS colorTest.parseColor("hsla(300, 100%, 37.5%, 1)") is "rgb(191, 0, 191)" -FAIL colorTest.parseColor("hsla(330, 100%, 37.5%, 1)") should be rgb(191, 0, 95). Was rgb(191, 0, 96). +PASS colorTest.parseColor("hsla(330, 100%, 37.5%, 1)") is "rgb(191, 0, 95)" PASS colorTest.parseColor("hsla(0, 0%, 50%, 1)") is "rgb(127, 127, 127)" PASS colorTest.parseColor("hsla(30, 0%, 50%, 1)") is "rgb(127, 127, 127)" PASS colorTest.parseColor("hsla(60, 0%, 50%, 1)") is "rgb(127, 127, 127)" @@ -475,75 +475,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 50%, 1)") is "rgb(175, 79, 79)" PASS colorTest.parseColor("hsla(30, 37.5%, 50%, 1)") is "rgb(175, 127, 79)" PASS colorTest.parseColor("hsla(60, 37.5%, 50%, 1)") is "rgb(175, 175, 79)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 50%, 1)") should be rgb(127, 175, 79). Was rgb(128, 175, 79). +PASS colorTest.parseColor("hsla(90, 37.5%, 50%, 1)") is "rgb(127, 175, 79)" PASS colorTest.parseColor("hsla(120, 37.5%, 50%, 1)") is "rgb(79, 175, 79)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 50%, 1)") should be rgb(79, 175, 127). Was rgb(79, 175, 128). +PASS colorTest.parseColor("hsla(150, 37.5%, 50%, 1)") is "rgb(79, 175, 127)" PASS colorTest.parseColor("hsla(180, 37.5%, 50%, 1)") is "rgb(79, 175, 175)" PASS colorTest.parseColor("hsla(210, 37.5%, 50%, 1)") is "rgb(79, 127, 175)" PASS colorTest.parseColor("hsla(240, 37.5%, 50%, 1)") is "rgb(79, 79, 175)" PASS colorTest.parseColor("hsla(270, 37.5%, 50%, 1)") is "rgb(127, 79, 175)" PASS colorTest.parseColor("hsla(300, 37.5%, 50%, 1)") is "rgb(175, 79, 175)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 50%, 1)") should be rgb(175, 79, 127). Was rgb(175, 79, 128). +PASS colorTest.parseColor("hsla(330, 37.5%, 50%, 1)") is "rgb(175, 79, 127)" PASS colorTest.parseColor("hsla(0, 50%, 50%, 1)") is "rgb(191, 63, 63)" PASS colorTest.parseColor("hsla(30, 50%, 50%, 1)") is "rgb(191, 127, 63)" PASS colorTest.parseColor("hsla(60, 50%, 50%, 1)") is "rgb(191, 191, 63)" -FAIL colorTest.parseColor("hsla(90, 50%, 50%, 1)") should be rgb(127, 191, 63). Was rgb(128, 191, 63). +PASS colorTest.parseColor("hsla(90, 50%, 50%, 1)") is "rgb(127, 191, 63)" PASS colorTest.parseColor("hsla(120, 50%, 50%, 1)") is "rgb(63, 191, 63)" -FAIL colorTest.parseColor("hsla(150, 50%, 50%, 1)") should be rgb(63, 191, 127). Was rgb(63, 191, 128). +PASS colorTest.parseColor("hsla(150, 50%, 50%, 1)") is "rgb(63, 191, 127)" PASS colorTest.parseColor("hsla(180, 50%, 50%, 1)") is "rgb(63, 191, 191)" PASS colorTest.parseColor("hsla(210, 50%, 50%, 1)") is "rgb(63, 127, 191)" PASS colorTest.parseColor("hsla(240, 50%, 50%, 1)") is "rgb(63, 63, 191)" PASS colorTest.parseColor("hsla(270, 50%, 50%, 1)") is "rgb(127, 63, 191)" PASS colorTest.parseColor("hsla(300, 50%, 50%, 1)") is "rgb(191, 63, 191)" -FAIL colorTest.parseColor("hsla(330, 50%, 50%, 1)") should be rgb(191, 63, 127). Was rgb(191, 63, 128). +PASS colorTest.parseColor("hsla(330, 50%, 50%, 1)") is "rgb(191, 63, 127)" PASS colorTest.parseColor("hsla(0, 62.5%, 50%, 1)") is "rgb(207, 47, 47)" PASS colorTest.parseColor("hsla(30, 62.5%, 50%, 1)") is "rgb(207, 127, 47)" PASS colorTest.parseColor("hsla(60, 62.5%, 50%, 1)") is "rgb(207, 207, 47)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 50%, 1)") should be rgb(127, 207, 47). Was rgb(128, 207, 47). +PASS colorTest.parseColor("hsla(90, 62.5%, 50%, 1)") is "rgb(127, 207, 47)" PASS colorTest.parseColor("hsla(120, 62.5%, 50%, 1)") is "rgb(47, 207, 47)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 50%, 1)") should be rgb(47, 207, 127). Was rgb(47, 207, 128). +PASS colorTest.parseColor("hsla(150, 62.5%, 50%, 1)") is "rgb(47, 207, 127)" PASS colorTest.parseColor("hsla(180, 62.5%, 50%, 1)") is "rgb(47, 207, 207)" PASS colorTest.parseColor("hsla(210, 62.5%, 50%, 1)") is "rgb(47, 127, 207)" PASS colorTest.parseColor("hsla(240, 62.5%, 50%, 1)") is "rgb(47, 47, 207)" PASS colorTest.parseColor("hsla(270, 62.5%, 50%, 1)") is "rgb(127, 47, 207)" PASS colorTest.parseColor("hsla(300, 62.5%, 50%, 1)") is "rgb(207, 47, 207)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 50%, 1)") should be rgb(207, 47, 127). Was rgb(207, 47, 128). +PASS colorTest.parseColor("hsla(330, 62.5%, 50%, 1)") is "rgb(207, 47, 127)" PASS colorTest.parseColor("hsla(0, 75%, 50%, 1)") is "rgb(223, 31, 31)" PASS colorTest.parseColor("hsla(30, 75%, 50%, 1)") is "rgb(223, 127, 31)" PASS colorTest.parseColor("hsla(60, 75%, 50%, 1)") is "rgb(223, 223, 31)" -FAIL colorTest.parseColor("hsla(90, 75%, 50%, 1)") should be rgb(127, 223, 31). Was rgb(128, 223, 31). +PASS colorTest.parseColor("hsla(90, 75%, 50%, 1)") is "rgb(127, 223, 31)" PASS colorTest.parseColor("hsla(120, 75%, 50%, 1)") is "rgb(31, 223, 31)" -FAIL colorTest.parseColor("hsla(150, 75%, 50%, 1)") should be rgb(31, 223, 127). Was rgb(31, 223, 128). +PASS colorTest.parseColor("hsla(150, 75%, 50%, 1)") is "rgb(31, 223, 127)" PASS colorTest.parseColor("hsla(180, 75%, 50%, 1)") is "rgb(31, 223, 223)" PASS colorTest.parseColor("hsla(210, 75%, 50%, 1)") is "rgb(31, 127, 223)" PASS colorTest.parseColor("hsla(240, 75%, 50%, 1)") is "rgb(31, 31, 223)" PASS colorTest.parseColor("hsla(270, 75%, 50%, 1)") is "rgb(127, 31, 223)" PASS colorTest.parseColor("hsla(300, 75%, 50%, 1)") is "rgb(223, 31, 223)" -FAIL colorTest.parseColor("hsla(330, 75%, 50%, 1)") should be rgb(223, 31, 127). Was rgb(223, 31, 128). +PASS colorTest.parseColor("hsla(330, 75%, 50%, 1)") is "rgb(223, 31, 127)" PASS colorTest.parseColor("hsla(0, 87.5%, 50%, 1)") is "rgb(239, 15, 15)" PASS colorTest.parseColor("hsla(30, 87.5%, 50%, 1)") is "rgb(239, 127, 15)" PASS colorTest.parseColor("hsla(60, 87.5%, 50%, 1)") is "rgb(239, 239, 15)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 50%, 1)") should be rgb(127, 239, 15). Was rgb(128, 239, 15). +PASS colorTest.parseColor("hsla(90, 87.5%, 50%, 1)") is "rgb(127, 239, 15)" PASS colorTest.parseColor("hsla(120, 87.5%, 50%, 1)") is "rgb(15, 239, 15)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 50%, 1)") should be rgb(15, 239, 127). Was rgb(15, 239, 128). +PASS colorTest.parseColor("hsla(150, 87.5%, 50%, 1)") is "rgb(15, 239, 127)" PASS colorTest.parseColor("hsla(180, 87.5%, 50%, 1)") is "rgb(15, 239, 239)" PASS colorTest.parseColor("hsla(210, 87.5%, 50%, 1)") is "rgb(15, 127, 239)" PASS colorTest.parseColor("hsla(240, 87.5%, 50%, 1)") is "rgb(15, 15, 239)" PASS colorTest.parseColor("hsla(270, 87.5%, 50%, 1)") is "rgb(127, 15, 239)" PASS colorTest.parseColor("hsla(300, 87.5%, 50%, 1)") is "rgb(239, 15, 239)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 50%, 1)") should be rgb(239, 15, 127). Was rgb(239, 15, 128). +PASS colorTest.parseColor("hsla(330, 87.5%, 50%, 1)") is "rgb(239, 15, 127)" PASS colorTest.parseColor("hsla(0, 100%, 50%, 1)") is "rgb(255, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 50%, 1)") is "rgb(255, 127, 0)" PASS colorTest.parseColor("hsla(60, 100%, 50%, 1)") is "rgb(255, 255, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 50%, 1)") should be rgb(127, 255, 0). Was rgb(128, 255, 0). +PASS colorTest.parseColor("hsla(90, 100%, 50%, 1)") is "rgb(127, 255, 0)" PASS colorTest.parseColor("hsla(120, 100%, 50%, 1)") is "rgb(0, 255, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 50%, 1)") should be rgb(0, 255, 127). Was rgb(0, 255, 128). +PASS colorTest.parseColor("hsla(150, 100%, 50%, 1)") is "rgb(0, 255, 127)" PASS colorTest.parseColor("hsla(180, 100%, 50%, 1)") is "rgb(0, 255, 255)" PASS colorTest.parseColor("hsla(210, 100%, 50%, 1)") is "rgb(0, 127, 255)" PASS colorTest.parseColor("hsla(240, 100%, 50%, 1)") is "rgb(0, 0, 255)" PASS colorTest.parseColor("hsla(270, 100%, 50%, 1)") is "rgb(127, 0, 255)" PASS colorTest.parseColor("hsla(300, 100%, 50%, 1)") is "rgb(255, 0, 255)" -FAIL colorTest.parseColor("hsla(330, 100%, 50%, 1)") should be rgb(255, 0, 127). Was rgb(255, 0, 128). +PASS colorTest.parseColor("hsla(330, 100%, 50%, 1)") is "rgb(255, 0, 127)" PASS colorTest.parseColor("hsla(0, 0%, 62.5%, 1)") is "rgb(159, 159, 159)" PASS colorTest.parseColor("hsla(30, 0%, 62.5%, 1)") is "rgb(159, 159, 159)" PASS colorTest.parseColor("hsla(60, 0%, 62.5%, 1)") is "rgb(159, 159, 159)" @@ -595,63 +595,63 @@ PASS colorTest.parseColor("hsla(0, 50%, 62.5%, 1)") is "rgb(207, 111, 111)" PASS colorTest.parseColor("hsla(30, 50%, 62.5%, 1)") is "rgb(207, 159, 111)" PASS colorTest.parseColor("hsla(60, 50%, 62.5%, 1)") is "rgb(207, 207, 111)" -FAIL colorTest.parseColor("hsla(90, 50%, 62.5%, 1)") should be rgb(159, 207, 111). Was rgb(160, 207, 111). +PASS colorTest.parseColor("hsla(90, 50%, 62.5%, 1)") is "rgb(159, 207, 111)" PASS colorTest.parseColor("hsla(120, 50%, 62.5%, 1)") is "rgb(111, 207, 111)" -FAIL colorTest.parseColor("hsla(150, 50%, 62.5%, 1)") should be rgb(111, 207, 159). Was rgb(111, 207, 160). +PASS colorTest.parseColor("hsla(150, 50%, 62.5%, 1)") is "rgb(111, 207, 159)" PASS colorTest.parseColor("hsla(180, 50%, 62.5%, 1)") is "rgb(111, 207, 207)" PASS colorTest.parseColor("hsla(210, 50%, 62.5%, 1)") is "rgb(111, 159, 207)" PASS colorTest.parseColor("hsla(240, 50%, 62.5%, 1)") is "rgb(111, 111, 207)" PASS colorTest.parseColor("hsla(270, 50%, 62.5%, 1)") is "rgb(159, 111, 207)" PASS colorTest.parseColor("hsla(300, 50%, 62.5%, 1)") is "rgb(207, 111, 207)" -FAIL colorTest.parseColor("hsla(330, 50%, 62.5%, 1)") should be rgb(207, 111, 159). Was rgb(207, 111, 160). +PASS colorTest.parseColor("hsla(330, 50%, 62.5%, 1)") is "rgb(207, 111, 159)" PASS colorTest.parseColor("hsla(0, 62.5%, 62.5%, 1)") is "rgb(219, 99, 99)" PASS colorTest.parseColor("hsla(30, 62.5%, 62.5%, 1)") is "rgb(219, 159, 99)" PASS colorTest.parseColor("hsla(60, 62.5%, 62.5%, 1)") is "rgb(219, 219, 99)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 62.5%, 1)") should be rgb(159, 219, 99). Was rgb(160, 219, 99). +PASS colorTest.parseColor("hsla(90, 62.5%, 62.5%, 1)") is "rgb(159, 219, 99)" PASS colorTest.parseColor("hsla(120, 62.5%, 62.5%, 1)") is "rgb(99, 219, 99)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 62.5%, 1)") should be rgb(99, 219, 159). Was rgb(99, 219, 160). +PASS colorTest.parseColor("hsla(150, 62.5%, 62.5%, 1)") is "rgb(99, 219, 159)" PASS colorTest.parseColor("hsla(180, 62.5%, 62.5%, 1)") is "rgb(99, 219, 219)" PASS colorTest.parseColor("hsla(210, 62.5%, 62.5%, 1)") is "rgb(99, 159, 219)" PASS colorTest.parseColor("hsla(240, 62.5%, 62.5%, 1)") is "rgb(99, 99, 219)" PASS colorTest.parseColor("hsla(270, 62.5%, 62.5%, 1)") is "rgb(159, 99, 219)" PASS colorTest.parseColor("hsla(300, 62.5%, 62.5%, 1)") is "rgb(219, 99, 219)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 62.5%, 1)") should be rgb(219, 99, 159). Was rgb(219, 99, 160). +PASS colorTest.parseColor("hsla(330, 62.5%, 62.5%, 1)") is "rgb(219, 99, 159)" PASS colorTest.parseColor("hsla(0, 75%, 62.5%, 1)") is "rgb(231, 87, 87)" PASS colorTest.parseColor("hsla(30, 75%, 62.5%, 1)") is "rgb(231, 159, 87)" PASS colorTest.parseColor("hsla(60, 75%, 62.5%, 1)") is "rgb(231, 231, 87)" -FAIL colorTest.parseColor("hsla(90, 75%, 62.5%, 1)") should be rgb(159, 231, 87). Was rgb(160, 231, 87). +PASS colorTest.parseColor("hsla(90, 75%, 62.5%, 1)") is "rgb(159, 231, 87)" PASS colorTest.parseColor("hsla(120, 75%, 62.5%, 1)") is "rgb(87, 231, 87)" -FAIL colorTest.parseColor("hsla(150, 75%, 62.5%, 1)") should be rgb(87, 231, 159). Was rgb(87, 231, 160). +PASS colorTest.parseColor("hsla(150, 75%, 62.5%, 1)") is "rgb(87, 231, 159)" PASS colorTest.parseColor("hsla(180, 75%, 62.5%, 1)") is "rgb(87, 231, 231)" PASS colorTest.parseColor("hsla(210, 75%, 62.5%, 1)") is "rgb(87, 159, 231)" PASS colorTest.parseColor("hsla(240, 75%, 62.5%, 1)") is "rgb(87, 87, 231)" PASS colorTest.parseColor("hsla(270, 75%, 62.5%, 1)") is "rgb(159, 87, 231)" PASS colorTest.parseColor("hsla(300, 75%, 62.5%, 1)") is "rgb(231, 87, 231)" -FAIL colorTest.parseColor("hsla(330, 75%, 62.5%, 1)") should be rgb(231, 87, 159). Was rgb(231, 87, 160). +PASS colorTest.parseColor("hsla(330, 75%, 62.5%, 1)") is "rgb(231, 87, 159)" PASS colorTest.parseColor("hsla(0, 87.5%, 62.5%, 1)") is "rgb(243, 75, 75)" PASS colorTest.parseColor("hsla(30, 87.5%, 62.5%, 1)") is "rgb(243, 159, 75)" PASS colorTest.parseColor("hsla(60, 87.5%, 62.5%, 1)") is "rgb(243, 243, 75)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 62.5%, 1)") should be rgb(159, 243, 75). Was rgb(160, 243, 75). +PASS colorTest.parseColor("hsla(90, 87.5%, 62.5%, 1)") is "rgb(159, 243, 75)" PASS colorTest.parseColor("hsla(120, 87.5%, 62.5%, 1)") is "rgb(75, 243, 75)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 62.5%, 1)") should be rgb(75, 243, 159). Was rgb(75, 243, 160). +PASS colorTest.parseColor("hsla(150, 87.5%, 62.5%, 1)") is "rgb(75, 243, 159)" PASS colorTest.parseColor("hsla(180, 87.5%, 62.5%, 1)") is "rgb(75, 243, 243)" PASS colorTest.parseColor("hsla(210, 87.5%, 62.5%, 1)") is "rgb(75, 159, 243)" PASS colorTest.parseColor("hsla(240, 87.5%, 62.5%, 1)") is "rgb(75, 75, 243)" PASS colorTest.parseColor("hsla(270, 87.5%, 62.5%, 1)") is "rgb(159, 75, 243)" PASS colorTest.parseColor("hsla(300, 87.5%, 62.5%, 1)") is "rgb(243, 75, 243)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 62.5%, 1)") should be rgb(243, 75, 159). Was rgb(243, 75, 160). +PASS colorTest.parseColor("hsla(330, 87.5%, 62.5%, 1)") is "rgb(243, 75, 159)" PASS colorTest.parseColor("hsla(0, 100%, 62.5%, 1)") is "rgb(255, 63, 63)" PASS colorTest.parseColor("hsla(30, 100%, 62.5%, 1)") is "rgb(255, 159, 63)" PASS colorTest.parseColor("hsla(60, 100%, 62.5%, 1)") is "rgb(255, 255, 63)" -FAIL colorTest.parseColor("hsla(90, 100%, 62.5%, 1)") should be rgb(159, 255, 63). Was rgb(160, 255, 63). +PASS colorTest.parseColor("hsla(90, 100%, 62.5%, 1)") is "rgb(159, 255, 63)" PASS colorTest.parseColor("hsla(120, 100%, 62.5%, 1)") is "rgb(63, 255, 63)" -FAIL colorTest.parseColor("hsla(150, 100%, 62.5%, 1)") should be rgb(63, 255, 159). Was rgb(63, 255, 160). +PASS colorTest.parseColor("hsla(150, 100%, 62.5%, 1)") is "rgb(63, 255, 159)" PASS colorTest.parseColor("hsla(180, 100%, 62.5%, 1)") is "rgb(63, 255, 255)" PASS colorTest.parseColor("hsla(210, 100%, 62.5%, 1)") is "rgb(63, 159, 255)" PASS colorTest.parseColor("hsla(240, 100%, 62.5%, 1)") is "rgb(63, 63, 255)" PASS colorTest.parseColor("hsla(270, 100%, 62.5%, 1)") is "rgb(159, 63, 255)" PASS colorTest.parseColor("hsla(300, 100%, 62.5%, 1)") is "rgb(255, 63, 255)" -FAIL colorTest.parseColor("hsla(330, 100%, 62.5%, 1)") should be rgb(255, 63, 159). Was rgb(255, 63, 160). +PASS colorTest.parseColor("hsla(330, 100%, 62.5%, 1)") is "rgb(255, 63, 159)" PASS colorTest.parseColor("hsla(0, 0%, 75%, 1)") is "rgb(191, 191, 191)" PASS colorTest.parseColor("hsla(30, 0%, 75%, 1)") is "rgb(191, 191, 191)" PASS colorTest.parseColor("hsla(60, 0%, 75%, 1)") is "rgb(191, 191, 191)" @@ -727,39 +727,39 @@ PASS colorTest.parseColor("hsla(0, 75%, 75%, 1)") is "rgb(239, 143, 143)" PASS colorTest.parseColor("hsla(30, 75%, 75%, 1)") is "rgb(239, 191, 143)" PASS colorTest.parseColor("hsla(60, 75%, 75%, 1)") is "rgb(239, 239, 143)" -FAIL colorTest.parseColor("hsla(90, 75%, 75%, 1)") should be rgb(191, 239, 143). Was rgb(192, 239, 143). +PASS colorTest.parseColor("hsla(90, 75%, 75%, 1)") is "rgb(191, 239, 143)" PASS colorTest.parseColor("hsla(120, 75%, 75%, 1)") is "rgb(143, 239, 143)" -FAIL colorTest.parseColor("hsla(150, 75%, 75%, 1)") should be rgb(143, 239, 191). Was rgb(143, 239, 192). +PASS colorTest.parseColor("hsla(150, 75%, 75%, 1)") is "rgb(143, 239, 191)" PASS colorTest.parseColor("hsla(180, 75%, 75%, 1)") is "rgb(143, 239, 239)" PASS colorTest.parseColor("hsla(210, 75%, 75%, 1)") is "rgb(143, 191, 239)" PASS colorTest.parseColor("hsla(240, 75%, 75%, 1)") is "rgb(143, 143, 239)" PASS colorTest.parseColor("hsla(270, 75%, 75%, 1)") is "rgb(191, 143, 239)" PASS colorTest.parseColor("hsla(300, 75%, 75%, 1)") is "rgb(239, 143, 239)" -FAIL colorTest.parseColor("hsla(330, 75%, 75%, 1)") should be rgb(239, 143, 191). Was rgb(239, 143, 192). +PASS colorTest.parseColor("hsla(330, 75%, 75%, 1)") is "rgb(239, 143, 191)" PASS colorTest.parseColor("hsla(0, 87.5%, 75%, 1)") is "rgb(247, 135, 135)" PASS colorTest.parseColor("hsla(30, 87.5%, 75%, 1)") is "rgb(247, 191, 135)" PASS colorTest.parseColor("hsla(60, 87.5%, 75%, 1)") is "rgb(247, 247, 135)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 75%, 1)") should be rgb(191, 247, 135). Was rgb(192, 247, 135). +PASS colorTest.parseColor("hsla(90, 87.5%, 75%, 1)") is "rgb(191, 247, 135)" PASS colorTest.parseColor("hsla(120, 87.5%, 75%, 1)") is "rgb(135, 247, 135)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 75%, 1)") should be rgb(135, 247, 191). Was rgb(135, 247, 192). +PASS colorTest.parseColor("hsla(150, 87.5%, 75%, 1)") is "rgb(135, 247, 191)" PASS colorTest.parseColor("hsla(180, 87.5%, 75%, 1)") is "rgb(135, 247, 247)" PASS colorTest.parseColor("hsla(210, 87.5%, 75%, 1)") is "rgb(135, 191, 247)" PASS colorTest.parseColor("hsla(240, 87.5%, 75%, 1)") is "rgb(135, 135, 247)" PASS colorTest.parseColor("hsla(270, 87.5%, 75%, 1)") is "rgb(191, 135, 247)" PASS colorTest.parseColor("hsla(300, 87.5%, 75%, 1)") is "rgb(247, 135, 247)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 75%, 1)") should be rgb(247, 135, 191). Was rgb(247, 135, 192). +PASS colorTest.parseColor("hsla(330, 87.5%, 75%, 1)") is "rgb(247, 135, 191)" PASS colorTest.parseColor("hsla(0, 100%, 75%, 1)") is "rgb(255, 127, 127)" PASS colorTest.parseColor("hsla(30, 100%, 75%, 1)") is "rgb(255, 191, 127)" PASS colorTest.parseColor("hsla(60, 100%, 75%, 1)") is "rgb(255, 255, 127)" -FAIL colorTest.parseColor("hsla(90, 100%, 75%, 1)") should be rgb(191, 255, 127). Was rgb(192, 255, 127). +PASS colorTest.parseColor("hsla(90, 100%, 75%, 1)") is "rgb(191, 255, 127)" PASS colorTest.parseColor("hsla(120, 100%, 75%, 1)") is "rgb(127, 255, 127)" -FAIL colorTest.parseColor("hsla(150, 100%, 75%, 1)") should be rgb(127, 255, 191). Was rgb(127, 255, 192). +PASS colorTest.parseColor("hsla(150, 100%, 75%, 1)") is "rgb(127, 255, 191)" PASS colorTest.parseColor("hsla(180, 100%, 75%, 1)") is "rgb(127, 255, 255)" PASS colorTest.parseColor("hsla(210, 100%, 75%, 1)") is "rgb(127, 191, 255)" PASS colorTest.parseColor("hsla(240, 100%, 75%, 1)") is "rgb(127, 127, 255)" PASS colorTest.parseColor("hsla(270, 100%, 75%, 1)") is "rgb(191, 127, 255)" PASS colorTest.parseColor("hsla(300, 100%, 75%, 1)") is "rgb(255, 127, 255)" -FAIL colorTest.parseColor("hsla(330, 100%, 75%, 1)") should be rgb(255, 127, 191). Was rgb(255, 127, 192). +PASS colorTest.parseColor("hsla(330, 100%, 75%, 1)") is "rgb(255, 127, 191)" PASS colorTest.parseColor("hsla(0, 0%, 87.5%, 1)") is "rgb(223, 223, 223)" PASS colorTest.parseColor("hsla(30, 0%, 87.5%, 1)") is "rgb(223, 223, 223)" PASS colorTest.parseColor("hsla(60, 0%, 87.5%, 1)") is "rgb(223, 223, 223)" @@ -1123,75 +1123,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 12.5%, 0.2)") is "rgba(43, 19, 19, 0.2)" PASS colorTest.parseColor("hsla(30, 37.5%, 12.5%, 0.2)") is "rgba(43, 31, 19, 0.2)" PASS colorTest.parseColor("hsla(60, 37.5%, 12.5%, 0.2)") is "rgba(43, 43, 19, 0.2)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 12.5%, 0.2)") should be rgba(31, 43, 19, 0.2). Was rgba(32, 43, 19, 0.2). +PASS colorTest.parseColor("hsla(90, 37.5%, 12.5%, 0.2)") is "rgba(31, 43, 19, 0.2)" PASS colorTest.parseColor("hsla(120, 37.5%, 12.5%, 0.2)") is "rgba(19, 43, 19, 0.2)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 12.5%, 0.2)") should be rgba(19, 43, 31, 0.2). Was rgba(19, 43, 32, 0.2). +PASS colorTest.parseColor("hsla(150, 37.5%, 12.5%, 0.2)") is "rgba(19, 43, 31, 0.2)" PASS colorTest.parseColor("hsla(180, 37.5%, 12.5%, 0.2)") is "rgba(19, 43, 43, 0.2)" PASS colorTest.parseColor("hsla(210, 37.5%, 12.5%, 0.2)") is "rgba(19, 31, 43, 0.2)" PASS colorTest.parseColor("hsla(240, 37.5%, 12.5%, 0.2)") is "rgba(19, 19, 43, 0.2)" PASS colorTest.parseColor("hsla(270, 37.5%, 12.5%, 0.2)") is "rgba(31, 19, 43, 0.2)" PASS colorTest.parseColor("hsla(300, 37.5%, 12.5%, 0.2)") is "rgba(43, 19, 43, 0.2)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 12.5%, 0.2)") should be rgba(43, 19, 31, 0.2). Was rgba(43, 19, 32, 0.2). +PASS colorTest.parseColor("hsla(330, 37.5%, 12.5%, 0.2)") is "rgba(43, 19, 31, 0.2)" PASS colorTest.parseColor("hsla(0, 50%, 12.5%, 0.2)") is "rgba(47, 15, 15, 0.2)" PASS colorTest.parseColor("hsla(30, 50%, 12.5%, 0.2)") is "rgba(47, 31, 15, 0.2)" PASS colorTest.parseColor("hsla(60, 50%, 12.5%, 0.2)") is "rgba(47, 47, 15, 0.2)" -FAIL colorTest.parseColor("hsla(90, 50%, 12.5%, 0.2)") should be rgba(31, 47, 15, 0.2). Was rgba(32, 47, 15, 0.2). +PASS colorTest.parseColor("hsla(90, 50%, 12.5%, 0.2)") is "rgba(31, 47, 15, 0.2)" PASS colorTest.parseColor("hsla(120, 50%, 12.5%, 0.2)") is "rgba(15, 47, 15, 0.2)" -FAIL colorTest.parseColor("hsla(150, 50%, 12.5%, 0.2)") should be rgba(15, 47, 31, 0.2). Was rgba(15, 47, 32, 0.2). +PASS colorTest.parseColor("hsla(150, 50%, 12.5%, 0.2)") is "rgba(15, 47, 31, 0.2)" PASS colorTest.parseColor("hsla(180, 50%, 12.5%, 0.2)") is "rgba(15, 47, 47, 0.2)" PASS colorTest.parseColor("hsla(210, 50%, 12.5%, 0.2)") is "rgba(15, 31, 47, 0.2)" PASS colorTest.parseColor("hsla(240, 50%, 12.5%, 0.2)") is "rgba(15, 15, 47, 0.2)" PASS colorTest.parseColor("hsla(270, 50%, 12.5%, 0.2)") is "rgba(31, 15, 47, 0.2)" PASS colorTest.parseColor("hsla(300, 50%, 12.5%, 0.2)") is "rgba(47, 15, 47, 0.2)" -FAIL colorTest.parseColor("hsla(330, 50%, 12.5%, 0.2)") should be rgba(47, 15, 31, 0.2). Was rgba(47, 15, 32, 0.2). +PASS colorTest.parseColor("hsla(330, 50%, 12.5%, 0.2)") is "rgba(47, 15, 31, 0.2)" PASS colorTest.parseColor("hsla(0, 62.5%, 12.5%, 0.2)") is "rgba(51, 11, 11, 0.2)" PASS colorTest.parseColor("hsla(30, 62.5%, 12.5%, 0.2)") is "rgba(51, 31, 11, 0.2)" PASS colorTest.parseColor("hsla(60, 62.5%, 12.5%, 0.2)") is "rgba(51, 51, 11, 0.2)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 12.5%, 0.2)") should be rgba(31, 51, 11, 0.2). Was rgba(32, 51, 11, 0.2). +PASS colorTest.parseColor("hsla(90, 62.5%, 12.5%, 0.2)") is "rgba(31, 51, 11, 0.2)" PASS colorTest.parseColor("hsla(120, 62.5%, 12.5%, 0.2)") is "rgba(11, 51, 11, 0.2)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 12.5%, 0.2)") should be rgba(11, 51, 31, 0.2). Was rgba(11, 51, 32, 0.2). +PASS colorTest.parseColor("hsla(150, 62.5%, 12.5%, 0.2)") is "rgba(11, 51, 31, 0.2)" PASS colorTest.parseColor("hsla(180, 62.5%, 12.5%, 0.2)") is "rgba(11, 51, 51, 0.2)" PASS colorTest.parseColor("hsla(210, 62.5%, 12.5%, 0.2)") is "rgba(11, 31, 51, 0.2)" PASS colorTest.parseColor("hsla(240, 62.5%, 12.5%, 0.2)") is "rgba(11, 11, 51, 0.2)" PASS colorTest.parseColor("hsla(270, 62.5%, 12.5%, 0.2)") is "rgba(31, 11, 51, 0.2)" PASS colorTest.parseColor("hsla(300, 62.5%, 12.5%, 0.2)") is "rgba(51, 11, 51, 0.2)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 12.5%, 0.2)") should be rgba(51, 11, 31, 0.2). Was rgba(51, 11, 32, 0.2). +PASS colorTest.parseColor("hsla(330, 62.5%, 12.5%, 0.2)") is "rgba(51, 11, 31, 0.2)" PASS colorTest.parseColor("hsla(0, 75%, 12.5%, 0.2)") is "rgba(55, 7, 7, 0.2)" PASS colorTest.parseColor("hsla(30, 75%, 12.5%, 0.2)") is "rgba(55, 31, 7, 0.2)" PASS colorTest.parseColor("hsla(60, 75%, 12.5%, 0.2)") is "rgba(55, 55, 7, 0.2)" -FAIL colorTest.parseColor("hsla(90, 75%, 12.5%, 0.2)") should be rgba(31, 55, 7, 0.2). Was rgba(32, 55, 7, 0.2). +PASS colorTest.parseColor("hsla(90, 75%, 12.5%, 0.2)") is "rgba(31, 55, 7, 0.2)" PASS colorTest.parseColor("hsla(120, 75%, 12.5%, 0.2)") is "rgba(7, 55, 7, 0.2)" -FAIL colorTest.parseColor("hsla(150, 75%, 12.5%, 0.2)") should be rgba(7, 55, 31, 0.2). Was rgba(7, 55, 32, 0.2). +PASS colorTest.parseColor("hsla(150, 75%, 12.5%, 0.2)") is "rgba(7, 55, 31, 0.2)" PASS colorTest.parseColor("hsla(180, 75%, 12.5%, 0.2)") is "rgba(7, 55, 55, 0.2)" PASS colorTest.parseColor("hsla(210, 75%, 12.5%, 0.2)") is "rgba(7, 31, 55, 0.2)" PASS colorTest.parseColor("hsla(240, 75%, 12.5%, 0.2)") is "rgba(7, 7, 55, 0.2)" PASS colorTest.parseColor("hsla(270, 75%, 12.5%, 0.2)") is "rgba(31, 7, 55, 0.2)" PASS colorTest.parseColor("hsla(300, 75%, 12.5%, 0.2)") is "rgba(55, 7, 55, 0.2)" -FAIL colorTest.parseColor("hsla(330, 75%, 12.5%, 0.2)") should be rgba(55, 7, 31, 0.2). Was rgba(55, 7, 32, 0.2). +PASS colorTest.parseColor("hsla(330, 75%, 12.5%, 0.2)") is "rgba(55, 7, 31, 0.2)" PASS colorTest.parseColor("hsla(0, 87.5%, 12.5%, 0.2)") is "rgba(59, 3, 3, 0.2)" PASS colorTest.parseColor("hsla(30, 87.5%, 12.5%, 0.2)") is "rgba(59, 31, 3, 0.2)" PASS colorTest.parseColor("hsla(60, 87.5%, 12.5%, 0.2)") is "rgba(59, 59, 3, 0.2)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 12.5%, 0.2)") should be rgba(31, 59, 3, 0.2). Was rgba(32, 59, 3, 0.2). +PASS colorTest.parseColor("hsla(90, 87.5%, 12.5%, 0.2)") is "rgba(31, 59, 3, 0.2)" PASS colorTest.parseColor("hsla(120, 87.5%, 12.5%, 0.2)") is "rgba(3, 59, 3, 0.2)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 12.5%, 0.2)") should be rgba(3, 59, 31, 0.2). Was rgba(3, 59, 32, 0.2). +PASS colorTest.parseColor("hsla(150, 87.5%, 12.5%, 0.2)") is "rgba(3, 59, 31, 0.2)" PASS colorTest.parseColor("hsla(180, 87.5%, 12.5%, 0.2)") is "rgba(3, 59, 59, 0.2)" PASS colorTest.parseColor("hsla(210, 87.5%, 12.5%, 0.2)") is "rgba(3, 31, 59, 0.2)" PASS colorTest.parseColor("hsla(240, 87.5%, 12.5%, 0.2)") is "rgba(3, 3, 59, 0.2)" PASS colorTest.parseColor("hsla(270, 87.5%, 12.5%, 0.2)") is "rgba(31, 3, 59, 0.2)" PASS colorTest.parseColor("hsla(300, 87.5%, 12.5%, 0.2)") is "rgba(59, 3, 59, 0.2)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 12.5%, 0.2)") should be rgba(59, 3, 31, 0.2). Was rgba(59, 3, 32, 0.2). +PASS colorTest.parseColor("hsla(330, 87.5%, 12.5%, 0.2)") is "rgba(59, 3, 31, 0.2)" PASS colorTest.parseColor("hsla(0, 100%, 12.5%, 0.2)") is "rgba(63, 0, 0, 0.2)" PASS colorTest.parseColor("hsla(30, 100%, 12.5%, 0.2)") is "rgba(63, 31, 0, 0.2)" PASS colorTest.parseColor("hsla(60, 100%, 12.5%, 0.2)") is "rgba(63, 63, 0, 0.2)" -FAIL colorTest.parseColor("hsla(90, 100%, 12.5%, 0.2)") should be rgba(31, 63, 0, 0.2). Was rgba(32, 63, 0, 0.2). +PASS colorTest.parseColor("hsla(90, 100%, 12.5%, 0.2)") is "rgba(31, 63, 0, 0.2)" PASS colorTest.parseColor("hsla(120, 100%, 12.5%, 0.2)") is "rgba(0, 63, 0, 0.2)" -FAIL colorTest.parseColor("hsla(150, 100%, 12.5%, 0.2)") should be rgba(0, 63, 31, 0.2). Was rgba(0, 63, 32, 0.2). +PASS colorTest.parseColor("hsla(150, 100%, 12.5%, 0.2)") is "rgba(0, 63, 31, 0.2)" PASS colorTest.parseColor("hsla(180, 100%, 12.5%, 0.2)") is "rgba(0, 63, 63, 0.2)" PASS colorTest.parseColor("hsla(210, 100%, 12.5%, 0.2)") is "rgba(0, 31, 63, 0.2)" PASS colorTest.parseColor("hsla(240, 100%, 12.5%, 0.2)") is "rgba(0, 0, 63, 0.2)" PASS colorTest.parseColor("hsla(270, 100%, 12.5%, 0.2)") is "rgba(31, 0, 63, 0.2)" PASS colorTest.parseColor("hsla(300, 100%, 12.5%, 0.2)") is "rgba(63, 0, 63, 0.2)" -FAIL colorTest.parseColor("hsla(330, 100%, 12.5%, 0.2)") should be rgba(63, 0, 31, 0.2). Was rgba(63, 0, 32, 0.2). +PASS colorTest.parseColor("hsla(330, 100%, 12.5%, 0.2)") is "rgba(63, 0, 31, 0.2)" PASS colorTest.parseColor("hsla(0, 0%, 25%, 0.2)") is "rgba(63, 63, 63, 0.2)" PASS colorTest.parseColor("hsla(30, 0%, 25%, 0.2)") is "rgba(63, 63, 63, 0.2)" PASS colorTest.parseColor("hsla(60, 0%, 25%, 0.2)") is "rgba(63, 63, 63, 0.2)" @@ -1231,75 +1231,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 25%, 0.2)") is "rgba(87, 39, 39, 0.2)" PASS colorTest.parseColor("hsla(30, 37.5%, 25%, 0.2)") is "rgba(87, 63, 39, 0.2)" PASS colorTest.parseColor("hsla(60, 37.5%, 25%, 0.2)") is "rgba(87, 87, 39, 0.2)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 25%, 0.2)") should be rgba(63, 87, 39, 0.2). Was rgba(64, 87, 39, 0.2). +PASS colorTest.parseColor("hsla(90, 37.5%, 25%, 0.2)") is "rgba(63, 87, 39, 0.2)" PASS colorTest.parseColor("hsla(120, 37.5%, 25%, 0.2)") is "rgba(39, 87, 39, 0.2)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 25%, 0.2)") should be rgba(39, 87, 63, 0.2). Was rgba(39, 87, 64, 0.2). +PASS colorTest.parseColor("hsla(150, 37.5%, 25%, 0.2)") is "rgba(39, 87, 63, 0.2)" PASS colorTest.parseColor("hsla(180, 37.5%, 25%, 0.2)") is "rgba(39, 87, 87, 0.2)" PASS colorTest.parseColor("hsla(210, 37.5%, 25%, 0.2)") is "rgba(39, 63, 87, 0.2)" PASS colorTest.parseColor("hsla(240, 37.5%, 25%, 0.2)") is "rgba(39, 39, 87, 0.2)" PASS colorTest.parseColor("hsla(270, 37.5%, 25%, 0.2)") is "rgba(63, 39, 87, 0.2)" PASS colorTest.parseColor("hsla(300, 37.5%, 25%, 0.2)") is "rgba(87, 39, 87, 0.2)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 25%, 0.2)") should be rgba(87, 39, 63, 0.2). Was rgba(87, 39, 64, 0.2). +PASS colorTest.parseColor("hsla(330, 37.5%, 25%, 0.2)") is "rgba(87, 39, 63, 0.2)" PASS colorTest.parseColor("hsla(0, 50%, 25%, 0.2)") is "rgba(95, 31, 31, 0.2)" PASS colorTest.parseColor("hsla(30, 50%, 25%, 0.2)") is "rgba(95, 63, 31, 0.2)" PASS colorTest.parseColor("hsla(60, 50%, 25%, 0.2)") is "rgba(95, 95, 31, 0.2)" -FAIL colorTest.parseColor("hsla(90, 50%, 25%, 0.2)") should be rgba(63, 95, 31, 0.2). Was rgba(64, 95, 31, 0.2). +PASS colorTest.parseColor("hsla(90, 50%, 25%, 0.2)") is "rgba(63, 95, 31, 0.2)" PASS colorTest.parseColor("hsla(120, 50%, 25%, 0.2)") is "rgba(31, 95, 31, 0.2)" -FAIL colorTest.parseColor("hsla(150, 50%, 25%, 0.2)") should be rgba(31, 95, 63, 0.2). Was rgba(31, 95, 64, 0.2). +PASS colorTest.parseColor("hsla(150, 50%, 25%, 0.2)") is "rgba(31, 95, 63, 0.2)" PASS colorTest.parseColor("hsla(180, 50%, 25%, 0.2)") is "rgba(31, 95, 95, 0.2)" PASS colorTest.parseColor("hsla(210, 50%, 25%, 0.2)") is "rgba(31, 63, 95, 0.2)" PASS colorTest.parseColor("hsla(240, 50%, 25%, 0.2)") is "rgba(31, 31, 95, 0.2)" PASS colorTest.parseColor("hsla(270, 50%, 25%, 0.2)") is "rgba(63, 31, 95, 0.2)" PASS colorTest.parseColor("hsla(300, 50%, 25%, 0.2)") is "rgba(95, 31, 95, 0.2)" -FAIL colorTest.parseColor("hsla(330, 50%, 25%, 0.2)") should be rgba(95, 31, 63, 0.2). Was rgba(95, 31, 64, 0.2). +PASS colorTest.parseColor("hsla(330, 50%, 25%, 0.2)") is "rgba(95, 31, 63, 0.2)" PASS colorTest.parseColor("hsla(0, 62.5%, 25%, 0.2)") is "rgba(103, 23, 23, 0.2)" PASS colorTest.parseColor("hsla(30, 62.5%, 25%, 0.2)") is "rgba(103, 63, 23, 0.2)" PASS colorTest.parseColor("hsla(60, 62.5%, 25%, 0.2)") is "rgba(103, 103, 23, 0.2)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 25%, 0.2)") should be rgba(63, 103, 23, 0.2). Was rgba(64, 103, 23, 0.2). +PASS colorTest.parseColor("hsla(90, 62.5%, 25%, 0.2)") is "rgba(63, 103, 23, 0.2)" PASS colorTest.parseColor("hsla(120, 62.5%, 25%, 0.2)") is "rgba(23, 103, 23, 0.2)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 25%, 0.2)") should be rgba(23, 103, 63, 0.2). Was rgba(23, 103, 64, 0.2). +PASS colorTest.parseColor("hsla(150, 62.5%, 25%, 0.2)") is "rgba(23, 103, 63, 0.2)" PASS colorTest.parseColor("hsla(180, 62.5%, 25%, 0.2)") is "rgba(23, 103, 103, 0.2)" PASS colorTest.parseColor("hsla(210, 62.5%, 25%, 0.2)") is "rgba(23, 63, 103, 0.2)" PASS colorTest.parseColor("hsla(240, 62.5%, 25%, 0.2)") is "rgba(23, 23, 103, 0.2)" PASS colorTest.parseColor("hsla(270, 62.5%, 25%, 0.2)") is "rgba(63, 23, 103, 0.2)" PASS colorTest.parseColor("hsla(300, 62.5%, 25%, 0.2)") is "rgba(103, 23, 103, 0.2)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 25%, 0.2)") should be rgba(103, 23, 63, 0.2). Was rgba(103, 23, 64, 0.2). +PASS colorTest.parseColor("hsla(330, 62.5%, 25%, 0.2)") is "rgba(103, 23, 63, 0.2)" PASS colorTest.parseColor("hsla(0, 75%, 25%, 0.2)") is "rgba(111, 15, 15, 0.2)" PASS colorTest.parseColor("hsla(30, 75%, 25%, 0.2)") is "rgba(111, 63, 15, 0.2)" PASS colorTest.parseColor("hsla(60, 75%, 25%, 0.2)") is "rgba(111, 111, 15, 0.2)" -FAIL colorTest.parseColor("hsla(90, 75%, 25%, 0.2)") should be rgba(63, 111, 15, 0.2). Was rgba(64, 111, 15, 0.2). +PASS colorTest.parseColor("hsla(90, 75%, 25%, 0.2)") is "rgba(63, 111, 15, 0.2)" PASS colorTest.parseColor("hsla(120, 75%, 25%, 0.2)") is "rgba(15, 111, 15, 0.2)" -FAIL colorTest.parseColor("hsla(150, 75%, 25%, 0.2)") should be rgba(15, 111, 63, 0.2). Was rgba(15, 111, 64, 0.2). +PASS colorTest.parseColor("hsla(150, 75%, 25%, 0.2)") is "rgba(15, 111, 63, 0.2)" PASS colorTest.parseColor("hsla(180, 75%, 25%, 0.2)") is "rgba(15, 111, 111, 0.2)" PASS colorTest.parseColor("hsla(210, 75%, 25%, 0.2)") is "rgba(15, 63, 111, 0.2)" PASS colorTest.parseColor("hsla(240, 75%, 25%, 0.2)") is "rgba(15, 15, 111, 0.2)" PASS colorTest.parseColor("hsla(270, 75%, 25%, 0.2)") is "rgba(63, 15, 111, 0.2)" PASS colorTest.parseColor("hsla(300, 75%, 25%, 0.2)") is "rgba(111, 15, 111, 0.2)" -FAIL colorTest.parseColor("hsla(330, 75%, 25%, 0.2)") should be rgba(111, 15, 63, 0.2). Was rgba(111, 15, 64, 0.2). +PASS colorTest.parseColor("hsla(330, 75%, 25%, 0.2)") is "rgba(111, 15, 63, 0.2)" PASS colorTest.parseColor("hsla(0, 87.5%, 25%, 0.2)") is "rgba(119, 7, 7, 0.2)" PASS colorTest.parseColor("hsla(30, 87.5%, 25%, 0.2)") is "rgba(119, 63, 7, 0.2)" PASS colorTest.parseColor("hsla(60, 87.5%, 25%, 0.2)") is "rgba(119, 119, 7, 0.2)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 25%, 0.2)") should be rgba(63, 119, 7, 0.2). Was rgba(64, 119, 7, 0.2). +PASS colorTest.parseColor("hsla(90, 87.5%, 25%, 0.2)") is "rgba(63, 119, 7, 0.2)" PASS colorTest.parseColor("hsla(120, 87.5%, 25%, 0.2)") is "rgba(7, 119, 7, 0.2)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 25%, 0.2)") should be rgba(7, 119, 63, 0.2). Was rgba(7, 119, 64, 0.2). +PASS colorTest.parseColor("hsla(150, 87.5%, 25%, 0.2)") is "rgba(7, 119, 63, 0.2)" PASS colorTest.parseColor("hsla(180, 87.5%, 25%, 0.2)") is "rgba(7, 119, 119, 0.2)" PASS colorTest.parseColor("hsla(210, 87.5%, 25%, 0.2)") is "rgba(7, 63, 119, 0.2)" PASS colorTest.parseColor("hsla(240, 87.5%, 25%, 0.2)") is "rgba(7, 7, 119, 0.2)" PASS colorTest.parseColor("hsla(270, 87.5%, 25%, 0.2)") is "rgba(63, 7, 119, 0.2)" PASS colorTest.parseColor("hsla(300, 87.5%, 25%, 0.2)") is "rgba(119, 7, 119, 0.2)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 25%, 0.2)") should be rgba(119, 7, 63, 0.2). Was rgba(119, 7, 64, 0.2). +PASS colorTest.parseColor("hsla(330, 87.5%, 25%, 0.2)") is "rgba(119, 7, 63, 0.2)" PASS colorTest.parseColor("hsla(0, 100%, 25%, 0.2)") is "rgba(127, 0, 0, 0.2)" PASS colorTest.parseColor("hsla(30, 100%, 25%, 0.2)") is "rgba(127, 63, 0, 0.2)" PASS colorTest.parseColor("hsla(60, 100%, 25%, 0.2)") is "rgba(127, 127, 0, 0.2)" -FAIL colorTest.parseColor("hsla(90, 100%, 25%, 0.2)") should be rgba(63, 127, 0, 0.2). Was rgba(64, 127, 0, 0.2). +PASS colorTest.parseColor("hsla(90, 100%, 25%, 0.2)") is "rgba(63, 127, 0, 0.2)" PASS colorTest.parseColor("hsla(120, 100%, 25%, 0.2)") is "rgba(0, 127, 0, 0.2)" -FAIL colorTest.parseColor("hsla(150, 100%, 25%, 0.2)") should be rgba(0, 127, 63, 0.2). Was rgba(0, 127, 64, 0.2). +PASS colorTest.parseColor("hsla(150, 100%, 25%, 0.2)") is "rgba(0, 127, 63, 0.2)" PASS colorTest.parseColor("hsla(180, 100%, 25%, 0.2)") is "rgba(0, 127, 127, 0.2)" PASS colorTest.parseColor("hsla(210, 100%, 25%, 0.2)") is "rgba(0, 63, 127, 0.2)" PASS colorTest.parseColor("hsla(240, 100%, 25%, 0.2)") is "rgba(0, 0, 127, 0.2)" PASS colorTest.parseColor("hsla(270, 100%, 25%, 0.2)") is "rgba(63, 0, 127, 0.2)" PASS colorTest.parseColor("hsla(300, 100%, 25%, 0.2)") is "rgba(127, 0, 127, 0.2)" -FAIL colorTest.parseColor("hsla(330, 100%, 25%, 0.2)") should be rgba(127, 0, 63, 0.2). Was rgba(127, 0, 64, 0.2). +PASS colorTest.parseColor("hsla(330, 100%, 25%, 0.2)") is "rgba(127, 0, 63, 0.2)" PASS colorTest.parseColor("hsla(0, 0%, 37.5%, 0.2)") is "rgba(95, 95, 95, 0.2)" PASS colorTest.parseColor("hsla(30, 0%, 37.5%, 0.2)") is "rgba(95, 95, 95, 0.2)" PASS colorTest.parseColor("hsla(60, 0%, 37.5%, 0.2)") is "rgba(95, 95, 95, 0.2)" @@ -1327,87 +1327,87 @@ PASS colorTest.parseColor("hsla(0, 25%, 37.5%, 0.2)") is "rgba(119, 71, 71, 0.2)" PASS colorTest.parseColor("hsla(30, 25%, 37.5%, 0.2)") is "rgba(119, 95, 71, 0.2)" PASS colorTest.parseColor("hsla(60, 25%, 37.5%, 0.2)") is "rgba(119, 119, 71, 0.2)" -FAIL colorTest.parseColor("hsla(90, 25%, 37.5%, 0.2)") should be rgba(95, 119, 71, 0.2). Was rgba(96, 119, 71, 0.2). +PASS colorTest.parseColor("hsla(90, 25%, 37.5%, 0.2)") is "rgba(95, 119, 71, 0.2)" PASS colorTest.parseColor("hsla(120, 25%, 37.5%, 0.2)") is "rgba(71, 119, 71, 0.2)" -FAIL colorTest.parseColor("hsla(150, 25%, 37.5%, 0.2)") should be rgba(71, 119, 95, 0.2). Was rgba(71, 119, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 25%, 37.5%, 0.2)") is "rgba(71, 119, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 25%, 37.5%, 0.2)") is "rgba(71, 119, 119, 0.2)" PASS colorTest.parseColor("hsla(210, 25%, 37.5%, 0.2)") is "rgba(71, 95, 119, 0.2)" PASS colorTest.parseColor("hsla(240, 25%, 37.5%, 0.2)") is "rgba(71, 71, 119, 0.2)" PASS colorTest.parseColor("hsla(270, 25%, 37.5%, 0.2)") is "rgba(95, 71, 119, 0.2)" PASS colorTest.parseColor("hsla(300, 25%, 37.5%, 0.2)") is "rgba(119, 71, 119, 0.2)" -FAIL colorTest.parseColor("hsla(330, 25%, 37.5%, 0.2)") should be rgba(119, 71, 95, 0.2). Was rgba(119, 71, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 25%, 37.5%, 0.2)") is "rgba(119, 71, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 37.5%, 37.5%, 0.2)") is "rgba(131, 59, 59, 0.2)" PASS colorTest.parseColor("hsla(30, 37.5%, 37.5%, 0.2)") is "rgba(131, 95, 59, 0.2)" PASS colorTest.parseColor("hsla(60, 37.5%, 37.5%, 0.2)") is "rgba(131, 131, 59, 0.2)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 37.5%, 0.2)") should be rgba(95, 131, 59, 0.2). Was rgba(96, 131, 59, 0.2). +PASS colorTest.parseColor("hsla(90, 37.5%, 37.5%, 0.2)") is "rgba(95, 131, 59, 0.2)" PASS colorTest.parseColor("hsla(120, 37.5%, 37.5%, 0.2)") is "rgba(59, 131, 59, 0.2)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 37.5%, 0.2)") should be rgba(59, 131, 95, 0.2). Was rgba(59, 131, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 37.5%, 37.5%, 0.2)") is "rgba(59, 131, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 37.5%, 37.5%, 0.2)") is "rgba(59, 131, 131, 0.2)" PASS colorTest.parseColor("hsla(210, 37.5%, 37.5%, 0.2)") is "rgba(59, 95, 131, 0.2)" PASS colorTest.parseColor("hsla(240, 37.5%, 37.5%, 0.2)") is "rgba(59, 59, 131, 0.2)" PASS colorTest.parseColor("hsla(270, 37.5%, 37.5%, 0.2)") is "rgba(95, 59, 131, 0.2)" PASS colorTest.parseColor("hsla(300, 37.5%, 37.5%, 0.2)") is "rgba(131, 59, 131, 0.2)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 37.5%, 0.2)") should be rgba(131, 59, 95, 0.2). Was rgba(131, 59, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 37.5%, 37.5%, 0.2)") is "rgba(131, 59, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 50%, 37.5%, 0.2)") is "rgba(143, 47, 47, 0.2)" PASS colorTest.parseColor("hsla(30, 50%, 37.5%, 0.2)") is "rgba(143, 95, 47, 0.2)" PASS colorTest.parseColor("hsla(60, 50%, 37.5%, 0.2)") is "rgba(143, 143, 47, 0.2)" -FAIL colorTest.parseColor("hsla(90, 50%, 37.5%, 0.2)") should be rgba(95, 143, 47, 0.2). Was rgba(96, 143, 47, 0.2). +PASS colorTest.parseColor("hsla(90, 50%, 37.5%, 0.2)") is "rgba(95, 143, 47, 0.2)" PASS colorTest.parseColor("hsla(120, 50%, 37.5%, 0.2)") is "rgba(47, 143, 47, 0.2)" -FAIL colorTest.parseColor("hsla(150, 50%, 37.5%, 0.2)") should be rgba(47, 143, 95, 0.2). Was rgba(47, 143, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 50%, 37.5%, 0.2)") is "rgba(47, 143, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 50%, 37.5%, 0.2)") is "rgba(47, 143, 143, 0.2)" PASS colorTest.parseColor("hsla(210, 50%, 37.5%, 0.2)") is "rgba(47, 95, 143, 0.2)" PASS colorTest.parseColor("hsla(240, 50%, 37.5%, 0.2)") is "rgba(47, 47, 143, 0.2)" PASS colorTest.parseColor("hsla(270, 50%, 37.5%, 0.2)") is "rgba(95, 47, 143, 0.2)" PASS colorTest.parseColor("hsla(300, 50%, 37.5%, 0.2)") is "rgba(143, 47, 143, 0.2)" -FAIL colorTest.parseColor("hsla(330, 50%, 37.5%, 0.2)") should be rgba(143, 47, 95, 0.2). Was rgba(143, 47, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 50%, 37.5%, 0.2)") is "rgba(143, 47, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 62.5%, 37.5%, 0.2)") is "rgba(155, 35, 35, 0.2)" PASS colorTest.parseColor("hsla(30, 62.5%, 37.5%, 0.2)") is "rgba(155, 95, 35, 0.2)" PASS colorTest.parseColor("hsla(60, 62.5%, 37.5%, 0.2)") is "rgba(155, 155, 35, 0.2)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 37.5%, 0.2)") should be rgba(95, 155, 35, 0.2). Was rgba(96, 155, 35, 0.2). +PASS colorTest.parseColor("hsla(90, 62.5%, 37.5%, 0.2)") is "rgba(95, 155, 35, 0.2)" PASS colorTest.parseColor("hsla(120, 62.5%, 37.5%, 0.2)") is "rgba(35, 155, 35, 0.2)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 37.5%, 0.2)") should be rgba(35, 155, 95, 0.2). Was rgba(35, 155, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 62.5%, 37.5%, 0.2)") is "rgba(35, 155, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 62.5%, 37.5%, 0.2)") is "rgba(35, 155, 155, 0.2)" PASS colorTest.parseColor("hsla(210, 62.5%, 37.5%, 0.2)") is "rgba(35, 95, 155, 0.2)" PASS colorTest.parseColor("hsla(240, 62.5%, 37.5%, 0.2)") is "rgba(35, 35, 155, 0.2)" PASS colorTest.parseColor("hsla(270, 62.5%, 37.5%, 0.2)") is "rgba(95, 35, 155, 0.2)" PASS colorTest.parseColor("hsla(300, 62.5%, 37.5%, 0.2)") is "rgba(155, 35, 155, 0.2)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 37.5%, 0.2)") should be rgba(155, 35, 95, 0.2). Was rgba(155, 35, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 62.5%, 37.5%, 0.2)") is "rgba(155, 35, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 75%, 37.5%, 0.2)") is "rgba(167, 23, 23, 0.2)" PASS colorTest.parseColor("hsla(30, 75%, 37.5%, 0.2)") is "rgba(167, 95, 23, 0.2)" PASS colorTest.parseColor("hsla(60, 75%, 37.5%, 0.2)") is "rgba(167, 167, 23, 0.2)" -FAIL colorTest.parseColor("hsla(90, 75%, 37.5%, 0.2)") should be rgba(95, 167, 23, 0.2). Was rgba(96, 167, 23, 0.2). +PASS colorTest.parseColor("hsla(90, 75%, 37.5%, 0.2)") is "rgba(95, 167, 23, 0.2)" PASS colorTest.parseColor("hsla(120, 75%, 37.5%, 0.2)") is "rgba(23, 167, 23, 0.2)" -FAIL colorTest.parseColor("hsla(150, 75%, 37.5%, 0.2)") should be rgba(23, 167, 95, 0.2). Was rgba(23, 167, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 75%, 37.5%, 0.2)") is "rgba(23, 167, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 75%, 37.5%, 0.2)") is "rgba(23, 167, 167, 0.2)" PASS colorTest.parseColor("hsla(210, 75%, 37.5%, 0.2)") is "rgba(23, 95, 167, 0.2)" PASS colorTest.parseColor("hsla(240, 75%, 37.5%, 0.2)") is "rgba(23, 23, 167, 0.2)" PASS colorTest.parseColor("hsla(270, 75%, 37.5%, 0.2)") is "rgba(95, 23, 167, 0.2)" PASS colorTest.parseColor("hsla(300, 75%, 37.5%, 0.2)") is "rgba(167, 23, 167, 0.2)" -FAIL colorTest.parseColor("hsla(330, 75%, 37.5%, 0.2)") should be rgba(167, 23, 95, 0.2). Was rgba(167, 23, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 75%, 37.5%, 0.2)") is "rgba(167, 23, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 87.5%, 37.5%, 0.2)") is "rgba(179, 11, 11, 0.2)" PASS colorTest.parseColor("hsla(30, 87.5%, 37.5%, 0.2)") is "rgba(179, 95, 11, 0.2)" PASS colorTest.parseColor("hsla(60, 87.5%, 37.5%, 0.2)") is "rgba(179, 179, 11, 0.2)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 37.5%, 0.2)") should be rgba(95, 179, 11, 0.2). Was rgba(96, 179, 11, 0.2). +PASS colorTest.parseColor("hsla(90, 87.5%, 37.5%, 0.2)") is "rgba(95, 179, 11, 0.2)" PASS colorTest.parseColor("hsla(120, 87.5%, 37.5%, 0.2)") is "rgba(11, 179, 11, 0.2)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 37.5%, 0.2)") should be rgba(11, 179, 95, 0.2). Was rgba(11, 179, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 87.5%, 37.5%, 0.2)") is "rgba(11, 179, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 87.5%, 37.5%, 0.2)") is "rgba(11, 179, 179, 0.2)" PASS colorTest.parseColor("hsla(210, 87.5%, 37.5%, 0.2)") is "rgba(11, 95, 179, 0.2)" PASS colorTest.parseColor("hsla(240, 87.5%, 37.5%, 0.2)") is "rgba(11, 11, 179, 0.2)" PASS colorTest.parseColor("hsla(270, 87.5%, 37.5%, 0.2)") is "rgba(95, 11, 179, 0.2)" PASS colorTest.parseColor("hsla(300, 87.5%, 37.5%, 0.2)") is "rgba(179, 11, 179, 0.2)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 37.5%, 0.2)") should be rgba(179, 11, 95, 0.2). Was rgba(179, 11, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 87.5%, 37.5%, 0.2)") is "rgba(179, 11, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 100%, 37.5%, 0.2)") is "rgba(191, 0, 0, 0.2)" PASS colorTest.parseColor("hsla(30, 100%, 37.5%, 0.2)") is "rgba(191, 95, 0, 0.2)" PASS colorTest.parseColor("hsla(60, 100%, 37.5%, 0.2)") is "rgba(191, 191, 0, 0.2)" -FAIL colorTest.parseColor("hsla(90, 100%, 37.5%, 0.2)") should be rgba(95, 191, 0, 0.2). Was rgba(96, 191, 0, 0.2). +PASS colorTest.parseColor("hsla(90, 100%, 37.5%, 0.2)") is "rgba(95, 191, 0, 0.2)" PASS colorTest.parseColor("hsla(120, 100%, 37.5%, 0.2)") is "rgba(0, 191, 0, 0.2)" -FAIL colorTest.parseColor("hsla(150, 100%, 37.5%, 0.2)") should be rgba(0, 191, 95, 0.2). Was rgba(0, 191, 96, 0.2). +PASS colorTest.parseColor("hsla(150, 100%, 37.5%, 0.2)") is "rgba(0, 191, 95, 0.2)" PASS colorTest.parseColor("hsla(180, 100%, 37.5%, 0.2)") is "rgba(0, 191, 191, 0.2)" PASS colorTest.parseColor("hsla(210, 100%, 37.5%, 0.2)") is "rgba(0, 95, 191, 0.2)" PASS colorTest.parseColor("hsla(240, 100%, 37.5%, 0.2)") is "rgba(0, 0, 191, 0.2)" PASS colorTest.parseColor("hsla(270, 100%, 37.5%, 0.2)") is "rgba(95, 0, 191, 0.2)" PASS colorTest.parseColor("hsla(300, 100%, 37.5%, 0.2)") is "rgba(191, 0, 191, 0.2)" -FAIL colorTest.parseColor("hsla(330, 100%, 37.5%, 0.2)") should be rgba(191, 0, 95, 0.2). Was rgba(191, 0, 96, 0.2). +PASS colorTest.parseColor("hsla(330, 100%, 37.5%, 0.2)") is "rgba(191, 0, 95, 0.2)" PASS colorTest.parseColor("hsla(0, 0%, 50%, 0.2)") is "rgba(127, 127, 127, 0.2)" PASS colorTest.parseColor("hsla(30, 0%, 50%, 0.2)") is "rgba(127, 127, 127, 0.2)" PASS colorTest.parseColor("hsla(60, 0%, 50%, 0.2)") is "rgba(127, 127, 127, 0.2)" @@ -1447,15 +1447,15 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 50%, 0.2)") is "rgba(175, 79, 79, 0.2)" PASS colorTest.parseColor("hsla(30, 37.5%, 50%, 0.2)") is "rgba(175, 127, 79, 0.2)" PASS colorTest.parseColor("hsla(60, 37.5%, 50%, 0.2)") is "rgba(175, 175, 79, 0.2)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 50%, 0.2)") should be rgba(127, 175, 79, 0.2). Was rgba(128, 175, 79, 0.2). +PASS colorTest.parseColor("hsla(90, 37.5%, 50%, 0.2)") is "rgba(127, 175, 79, 0.2)" PASS colorTest.parseColor("hsla(120, 37.5%, 50%, 0.2)") is "rgba(79, 175, 79, 0.2)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 50%, 0.2)") should be rgba(79, 175, 127, 0.2). Was rgba(79, 175, 128, 0.2). +PASS colorTest.parseColor("hsla(150, 37.5%, 50%, 0.2)") is "rgba(79, 175, 127, 0.2)" PASS colorTest.parseColor("hsla(180, 37.5%, 50%, 0.2)") is "rgba(79, 175, 175, 0.2)" PASS colorTest.parseColor("hsla(210, 37.5%, 50%, 0.2)") is "rgba(79, 127, 175, 0.2)" PASS colorTest.parseColor("hsla(240, 37.5%, 50%, 0.2)") is "rgba(79, 79, 175, 0.2)" PASS colorTest.parseColor("hsla(270, 37.5%, 50%, 0.2)") is "rgba(127, 79, 175, 0.2)" PASS colorTest.parseColor("hsla(300, 37.5%, 50%, 0.2)") is "rgba(175, 79, 175, 0.2)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 50%, 0.2)") should be rgba(175, 79, 127, 0.2). Was rgba(175, 79, 128, 0.2). +PASS colorTest.parseColor("hsla(330, 37.5%, 50%, 0.2)") is "rgba(175, 79, 127, 0.2)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/css-parser/color3_hsla_2-expected.txt b/third_party/WebKit/LayoutTests/css-parser/color3_hsla_2-expected.txt index 713d882..8b33550f 100644 --- a/third_party/WebKit/LayoutTests/css-parser/color3_hsla_2-expected.txt +++ b/third_party/WebKit/LayoutTests/css-parser/color3_hsla_2-expected.txt
@@ -7,63 +7,63 @@ PASS colorTest.parseColor("hsla(0, 50%, 50%, 0.2)") is "rgba(191, 63, 63, 0.2)" PASS colorTest.parseColor("hsla(30, 50%, 50%, 0.2)") is "rgba(191, 127, 63, 0.2)" PASS colorTest.parseColor("hsla(60, 50%, 50%, 0.2)") is "rgba(191, 191, 63, 0.2)" -FAIL colorTest.parseColor("hsla(90, 50%, 50%, 0.2)") should be rgba(127, 191, 63, 0.2). Was rgba(128, 191, 63, 0.2). +PASS colorTest.parseColor("hsla(90, 50%, 50%, 0.2)") is "rgba(127, 191, 63, 0.2)" PASS colorTest.parseColor("hsla(120, 50%, 50%, 0.2)") is "rgba(63, 191, 63, 0.2)" -FAIL colorTest.parseColor("hsla(150, 50%, 50%, 0.2)") should be rgba(63, 191, 127, 0.2). Was rgba(63, 191, 128, 0.2). +PASS colorTest.parseColor("hsla(150, 50%, 50%, 0.2)") is "rgba(63, 191, 127, 0.2)" PASS colorTest.parseColor("hsla(180, 50%, 50%, 0.2)") is "rgba(63, 191, 191, 0.2)" PASS colorTest.parseColor("hsla(210, 50%, 50%, 0.2)") is "rgba(63, 127, 191, 0.2)" PASS colorTest.parseColor("hsla(240, 50%, 50%, 0.2)") is "rgba(63, 63, 191, 0.2)" PASS colorTest.parseColor("hsla(270, 50%, 50%, 0.2)") is "rgba(127, 63, 191, 0.2)" PASS colorTest.parseColor("hsla(300, 50%, 50%, 0.2)") is "rgba(191, 63, 191, 0.2)" -FAIL colorTest.parseColor("hsla(330, 50%, 50%, 0.2)") should be rgba(191, 63, 127, 0.2). Was rgba(191, 63, 128, 0.2). +PASS colorTest.parseColor("hsla(330, 50%, 50%, 0.2)") is "rgba(191, 63, 127, 0.2)" PASS colorTest.parseColor("hsla(0, 62.5%, 50%, 0.2)") is "rgba(207, 47, 47, 0.2)" PASS colorTest.parseColor("hsla(30, 62.5%, 50%, 0.2)") is "rgba(207, 127, 47, 0.2)" PASS colorTest.parseColor("hsla(60, 62.5%, 50%, 0.2)") is "rgba(207, 207, 47, 0.2)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 50%, 0.2)") should be rgba(127, 207, 47, 0.2). Was rgba(128, 207, 47, 0.2). +PASS colorTest.parseColor("hsla(90, 62.5%, 50%, 0.2)") is "rgba(127, 207, 47, 0.2)" PASS colorTest.parseColor("hsla(120, 62.5%, 50%, 0.2)") is "rgba(47, 207, 47, 0.2)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 50%, 0.2)") should be rgba(47, 207, 127, 0.2). Was rgba(47, 207, 128, 0.2). +PASS colorTest.parseColor("hsla(150, 62.5%, 50%, 0.2)") is "rgba(47, 207, 127, 0.2)" PASS colorTest.parseColor("hsla(180, 62.5%, 50%, 0.2)") is "rgba(47, 207, 207, 0.2)" PASS colorTest.parseColor("hsla(210, 62.5%, 50%, 0.2)") is "rgba(47, 127, 207, 0.2)" PASS colorTest.parseColor("hsla(240, 62.5%, 50%, 0.2)") is "rgba(47, 47, 207, 0.2)" PASS colorTest.parseColor("hsla(270, 62.5%, 50%, 0.2)") is "rgba(127, 47, 207, 0.2)" PASS colorTest.parseColor("hsla(300, 62.5%, 50%, 0.2)") is "rgba(207, 47, 207, 0.2)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 50%, 0.2)") should be rgba(207, 47, 127, 0.2). Was rgba(207, 47, 128, 0.2). +PASS colorTest.parseColor("hsla(330, 62.5%, 50%, 0.2)") is "rgba(207, 47, 127, 0.2)" PASS colorTest.parseColor("hsla(0, 75%, 50%, 0.2)") is "rgba(223, 31, 31, 0.2)" PASS colorTest.parseColor("hsla(30, 75%, 50%, 0.2)") is "rgba(223, 127, 31, 0.2)" PASS colorTest.parseColor("hsla(60, 75%, 50%, 0.2)") is "rgba(223, 223, 31, 0.2)" -FAIL colorTest.parseColor("hsla(90, 75%, 50%, 0.2)") should be rgba(127, 223, 31, 0.2). Was rgba(128, 223, 31, 0.2). +PASS colorTest.parseColor("hsla(90, 75%, 50%, 0.2)") is "rgba(127, 223, 31, 0.2)" PASS colorTest.parseColor("hsla(120, 75%, 50%, 0.2)") is "rgba(31, 223, 31, 0.2)" -FAIL colorTest.parseColor("hsla(150, 75%, 50%, 0.2)") should be rgba(31, 223, 127, 0.2). Was rgba(31, 223, 128, 0.2). +PASS colorTest.parseColor("hsla(150, 75%, 50%, 0.2)") is "rgba(31, 223, 127, 0.2)" PASS colorTest.parseColor("hsla(180, 75%, 50%, 0.2)") is "rgba(31, 223, 223, 0.2)" PASS colorTest.parseColor("hsla(210, 75%, 50%, 0.2)") is "rgba(31, 127, 223, 0.2)" PASS colorTest.parseColor("hsla(240, 75%, 50%, 0.2)") is "rgba(31, 31, 223, 0.2)" PASS colorTest.parseColor("hsla(270, 75%, 50%, 0.2)") is "rgba(127, 31, 223, 0.2)" PASS colorTest.parseColor("hsla(300, 75%, 50%, 0.2)") is "rgba(223, 31, 223, 0.2)" -FAIL colorTest.parseColor("hsla(330, 75%, 50%, 0.2)") should be rgba(223, 31, 127, 0.2). Was rgba(223, 31, 128, 0.2). +PASS colorTest.parseColor("hsla(330, 75%, 50%, 0.2)") is "rgba(223, 31, 127, 0.2)" PASS colorTest.parseColor("hsla(0, 87.5%, 50%, 0.2)") is "rgba(239, 15, 15, 0.2)" PASS colorTest.parseColor("hsla(30, 87.5%, 50%, 0.2)") is "rgba(239, 127, 15, 0.2)" PASS colorTest.parseColor("hsla(60, 87.5%, 50%, 0.2)") is "rgba(239, 239, 15, 0.2)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 50%, 0.2)") should be rgba(127, 239, 15, 0.2). Was rgba(128, 239, 15, 0.2). +PASS colorTest.parseColor("hsla(90, 87.5%, 50%, 0.2)") is "rgba(127, 239, 15, 0.2)" PASS colorTest.parseColor("hsla(120, 87.5%, 50%, 0.2)") is "rgba(15, 239, 15, 0.2)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 50%, 0.2)") should be rgba(15, 239, 127, 0.2). Was rgba(15, 239, 128, 0.2). +PASS colorTest.parseColor("hsla(150, 87.5%, 50%, 0.2)") is "rgba(15, 239, 127, 0.2)" PASS colorTest.parseColor("hsla(180, 87.5%, 50%, 0.2)") is "rgba(15, 239, 239, 0.2)" PASS colorTest.parseColor("hsla(210, 87.5%, 50%, 0.2)") is "rgba(15, 127, 239, 0.2)" PASS colorTest.parseColor("hsla(240, 87.5%, 50%, 0.2)") is "rgba(15, 15, 239, 0.2)" PASS colorTest.parseColor("hsla(270, 87.5%, 50%, 0.2)") is "rgba(127, 15, 239, 0.2)" PASS colorTest.parseColor("hsla(300, 87.5%, 50%, 0.2)") is "rgba(239, 15, 239, 0.2)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 50%, 0.2)") should be rgba(239, 15, 127, 0.2). Was rgba(239, 15, 128, 0.2). +PASS colorTest.parseColor("hsla(330, 87.5%, 50%, 0.2)") is "rgba(239, 15, 127, 0.2)" PASS colorTest.parseColor("hsla(0, 100%, 50%, 0.2)") is "rgba(255, 0, 0, 0.2)" PASS colorTest.parseColor("hsla(30, 100%, 50%, 0.2)") is "rgba(255, 127, 0, 0.2)" PASS colorTest.parseColor("hsla(60, 100%, 50%, 0.2)") is "rgba(255, 255, 0, 0.2)" -FAIL colorTest.parseColor("hsla(90, 100%, 50%, 0.2)") should be rgba(127, 255, 0, 0.2). Was rgba(128, 255, 0, 0.2). +PASS colorTest.parseColor("hsla(90, 100%, 50%, 0.2)") is "rgba(127, 255, 0, 0.2)" PASS colorTest.parseColor("hsla(120, 100%, 50%, 0.2)") is "rgba(0, 255, 0, 0.2)" -FAIL colorTest.parseColor("hsla(150, 100%, 50%, 0.2)") should be rgba(0, 255, 127, 0.2). Was rgba(0, 255, 128, 0.2). +PASS colorTest.parseColor("hsla(150, 100%, 50%, 0.2)") is "rgba(0, 255, 127, 0.2)" PASS colorTest.parseColor("hsla(180, 100%, 50%, 0.2)") is "rgba(0, 255, 255, 0.2)" PASS colorTest.parseColor("hsla(210, 100%, 50%, 0.2)") is "rgba(0, 127, 255, 0.2)" PASS colorTest.parseColor("hsla(240, 100%, 50%, 0.2)") is "rgba(0, 0, 255, 0.2)" PASS colorTest.parseColor("hsla(270, 100%, 50%, 0.2)") is "rgba(127, 0, 255, 0.2)" PASS colorTest.parseColor("hsla(300, 100%, 50%, 0.2)") is "rgba(255, 0, 255, 0.2)" -FAIL colorTest.parseColor("hsla(330, 100%, 50%, 0.2)") should be rgba(255, 0, 127, 0.2). Was rgba(255, 0, 128, 0.2). +PASS colorTest.parseColor("hsla(330, 100%, 50%, 0.2)") is "rgba(255, 0, 127, 0.2)" PASS colorTest.parseColor("hsla(0, 0%, 62.5%, 0.2)") is "rgba(159, 159, 159, 0.2)" PASS colorTest.parseColor("hsla(30, 0%, 62.5%, 0.2)") is "rgba(159, 159, 159, 0.2)" PASS colorTest.parseColor("hsla(60, 0%, 62.5%, 0.2)") is "rgba(159, 159, 159, 0.2)" @@ -115,63 +115,63 @@ PASS colorTest.parseColor("hsla(0, 50%, 62.5%, 0.2)") is "rgba(207, 111, 111, 0.2)" PASS colorTest.parseColor("hsla(30, 50%, 62.5%, 0.2)") is "rgba(207, 159, 111, 0.2)" PASS colorTest.parseColor("hsla(60, 50%, 62.5%, 0.2)") is "rgba(207, 207, 111, 0.2)" -FAIL colorTest.parseColor("hsla(90, 50%, 62.5%, 0.2)") should be rgba(159, 207, 111, 0.2). Was rgba(160, 207, 111, 0.2). +PASS colorTest.parseColor("hsla(90, 50%, 62.5%, 0.2)") is "rgba(159, 207, 111, 0.2)" PASS colorTest.parseColor("hsla(120, 50%, 62.5%, 0.2)") is "rgba(111, 207, 111, 0.2)" -FAIL colorTest.parseColor("hsla(150, 50%, 62.5%, 0.2)") should be rgba(111, 207, 159, 0.2). Was rgba(111, 207, 160, 0.2). +PASS colorTest.parseColor("hsla(150, 50%, 62.5%, 0.2)") is "rgba(111, 207, 159, 0.2)" PASS colorTest.parseColor("hsla(180, 50%, 62.5%, 0.2)") is "rgba(111, 207, 207, 0.2)" PASS colorTest.parseColor("hsla(210, 50%, 62.5%, 0.2)") is "rgba(111, 159, 207, 0.2)" PASS colorTest.parseColor("hsla(240, 50%, 62.5%, 0.2)") is "rgba(111, 111, 207, 0.2)" PASS colorTest.parseColor("hsla(270, 50%, 62.5%, 0.2)") is "rgba(159, 111, 207, 0.2)" PASS colorTest.parseColor("hsla(300, 50%, 62.5%, 0.2)") is "rgba(207, 111, 207, 0.2)" -FAIL colorTest.parseColor("hsla(330, 50%, 62.5%, 0.2)") should be rgba(207, 111, 159, 0.2). Was rgba(207, 111, 160, 0.2). +PASS colorTest.parseColor("hsla(330, 50%, 62.5%, 0.2)") is "rgba(207, 111, 159, 0.2)" PASS colorTest.parseColor("hsla(0, 62.5%, 62.5%, 0.2)") is "rgba(219, 99, 99, 0.2)" PASS colorTest.parseColor("hsla(30, 62.5%, 62.5%, 0.2)") is "rgba(219, 159, 99, 0.2)" PASS colorTest.parseColor("hsla(60, 62.5%, 62.5%, 0.2)") is "rgba(219, 219, 99, 0.2)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 62.5%, 0.2)") should be rgba(159, 219, 99, 0.2). Was rgba(160, 219, 99, 0.2). +PASS colorTest.parseColor("hsla(90, 62.5%, 62.5%, 0.2)") is "rgba(159, 219, 99, 0.2)" PASS colorTest.parseColor("hsla(120, 62.5%, 62.5%, 0.2)") is "rgba(99, 219, 99, 0.2)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 62.5%, 0.2)") should be rgba(99, 219, 159, 0.2). Was rgba(99, 219, 160, 0.2). +PASS colorTest.parseColor("hsla(150, 62.5%, 62.5%, 0.2)") is "rgba(99, 219, 159, 0.2)" PASS colorTest.parseColor("hsla(180, 62.5%, 62.5%, 0.2)") is "rgba(99, 219, 219, 0.2)" PASS colorTest.parseColor("hsla(210, 62.5%, 62.5%, 0.2)") is "rgba(99, 159, 219, 0.2)" PASS colorTest.parseColor("hsla(240, 62.5%, 62.5%, 0.2)") is "rgba(99, 99, 219, 0.2)" PASS colorTest.parseColor("hsla(270, 62.5%, 62.5%, 0.2)") is "rgba(159, 99, 219, 0.2)" PASS colorTest.parseColor("hsla(300, 62.5%, 62.5%, 0.2)") is "rgba(219, 99, 219, 0.2)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 62.5%, 0.2)") should be rgba(219, 99, 159, 0.2). Was rgba(219, 99, 160, 0.2). +PASS colorTest.parseColor("hsla(330, 62.5%, 62.5%, 0.2)") is "rgba(219, 99, 159, 0.2)" PASS colorTest.parseColor("hsla(0, 75%, 62.5%, 0.2)") is "rgba(231, 87, 87, 0.2)" PASS colorTest.parseColor("hsla(30, 75%, 62.5%, 0.2)") is "rgba(231, 159, 87, 0.2)" PASS colorTest.parseColor("hsla(60, 75%, 62.5%, 0.2)") is "rgba(231, 231, 87, 0.2)" -FAIL colorTest.parseColor("hsla(90, 75%, 62.5%, 0.2)") should be rgba(159, 231, 87, 0.2). Was rgba(160, 231, 87, 0.2). +PASS colorTest.parseColor("hsla(90, 75%, 62.5%, 0.2)") is "rgba(159, 231, 87, 0.2)" PASS colorTest.parseColor("hsla(120, 75%, 62.5%, 0.2)") is "rgba(87, 231, 87, 0.2)" -FAIL colorTest.parseColor("hsla(150, 75%, 62.5%, 0.2)") should be rgba(87, 231, 159, 0.2). Was rgba(87, 231, 160, 0.2). +PASS colorTest.parseColor("hsla(150, 75%, 62.5%, 0.2)") is "rgba(87, 231, 159, 0.2)" PASS colorTest.parseColor("hsla(180, 75%, 62.5%, 0.2)") is "rgba(87, 231, 231, 0.2)" PASS colorTest.parseColor("hsla(210, 75%, 62.5%, 0.2)") is "rgba(87, 159, 231, 0.2)" PASS colorTest.parseColor("hsla(240, 75%, 62.5%, 0.2)") is "rgba(87, 87, 231, 0.2)" PASS colorTest.parseColor("hsla(270, 75%, 62.5%, 0.2)") is "rgba(159, 87, 231, 0.2)" PASS colorTest.parseColor("hsla(300, 75%, 62.5%, 0.2)") is "rgba(231, 87, 231, 0.2)" -FAIL colorTest.parseColor("hsla(330, 75%, 62.5%, 0.2)") should be rgba(231, 87, 159, 0.2). Was rgba(231, 87, 160, 0.2). +PASS colorTest.parseColor("hsla(330, 75%, 62.5%, 0.2)") is "rgba(231, 87, 159, 0.2)" PASS colorTest.parseColor("hsla(0, 87.5%, 62.5%, 0.2)") is "rgba(243, 75, 75, 0.2)" PASS colorTest.parseColor("hsla(30, 87.5%, 62.5%, 0.2)") is "rgba(243, 159, 75, 0.2)" PASS colorTest.parseColor("hsla(60, 87.5%, 62.5%, 0.2)") is "rgba(243, 243, 75, 0.2)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 62.5%, 0.2)") should be rgba(159, 243, 75, 0.2). Was rgba(160, 243, 75, 0.2). +PASS colorTest.parseColor("hsla(90, 87.5%, 62.5%, 0.2)") is "rgba(159, 243, 75, 0.2)" PASS colorTest.parseColor("hsla(120, 87.5%, 62.5%, 0.2)") is "rgba(75, 243, 75, 0.2)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 62.5%, 0.2)") should be rgba(75, 243, 159, 0.2). Was rgba(75, 243, 160, 0.2). +PASS colorTest.parseColor("hsla(150, 87.5%, 62.5%, 0.2)") is "rgba(75, 243, 159, 0.2)" PASS colorTest.parseColor("hsla(180, 87.5%, 62.5%, 0.2)") is "rgba(75, 243, 243, 0.2)" PASS colorTest.parseColor("hsla(210, 87.5%, 62.5%, 0.2)") is "rgba(75, 159, 243, 0.2)" PASS colorTest.parseColor("hsla(240, 87.5%, 62.5%, 0.2)") is "rgba(75, 75, 243, 0.2)" PASS colorTest.parseColor("hsla(270, 87.5%, 62.5%, 0.2)") is "rgba(159, 75, 243, 0.2)" PASS colorTest.parseColor("hsla(300, 87.5%, 62.5%, 0.2)") is "rgba(243, 75, 243, 0.2)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 62.5%, 0.2)") should be rgba(243, 75, 159, 0.2). Was rgba(243, 75, 160, 0.2). +PASS colorTest.parseColor("hsla(330, 87.5%, 62.5%, 0.2)") is "rgba(243, 75, 159, 0.2)" PASS colorTest.parseColor("hsla(0, 100%, 62.5%, 0.2)") is "rgba(255, 63, 63, 0.2)" PASS colorTest.parseColor("hsla(30, 100%, 62.5%, 0.2)") is "rgba(255, 159, 63, 0.2)" PASS colorTest.parseColor("hsla(60, 100%, 62.5%, 0.2)") is "rgba(255, 255, 63, 0.2)" -FAIL colorTest.parseColor("hsla(90, 100%, 62.5%, 0.2)") should be rgba(159, 255, 63, 0.2). Was rgba(160, 255, 63, 0.2). +PASS colorTest.parseColor("hsla(90, 100%, 62.5%, 0.2)") is "rgba(159, 255, 63, 0.2)" PASS colorTest.parseColor("hsla(120, 100%, 62.5%, 0.2)") is "rgba(63, 255, 63, 0.2)" -FAIL colorTest.parseColor("hsla(150, 100%, 62.5%, 0.2)") should be rgba(63, 255, 159, 0.2). Was rgba(63, 255, 160, 0.2). +PASS colorTest.parseColor("hsla(150, 100%, 62.5%, 0.2)") is "rgba(63, 255, 159, 0.2)" PASS colorTest.parseColor("hsla(180, 100%, 62.5%, 0.2)") is "rgba(63, 255, 255, 0.2)" PASS colorTest.parseColor("hsla(210, 100%, 62.5%, 0.2)") is "rgba(63, 159, 255, 0.2)" PASS colorTest.parseColor("hsla(240, 100%, 62.5%, 0.2)") is "rgba(63, 63, 255, 0.2)" PASS colorTest.parseColor("hsla(270, 100%, 62.5%, 0.2)") is "rgba(159, 63, 255, 0.2)" PASS colorTest.parseColor("hsla(300, 100%, 62.5%, 0.2)") is "rgba(255, 63, 255, 0.2)" -FAIL colorTest.parseColor("hsla(330, 100%, 62.5%, 0.2)") should be rgba(255, 63, 159, 0.2). Was rgba(255, 63, 160, 0.2). +PASS colorTest.parseColor("hsla(330, 100%, 62.5%, 0.2)") is "rgba(255, 63, 159, 0.2)" PASS colorTest.parseColor("hsla(0, 0%, 75%, 0.2)") is "rgba(191, 191, 191, 0.2)" PASS colorTest.parseColor("hsla(30, 0%, 75%, 0.2)") is "rgba(191, 191, 191, 0.2)" PASS colorTest.parseColor("hsla(60, 0%, 75%, 0.2)") is "rgba(191, 191, 191, 0.2)" @@ -247,39 +247,39 @@ PASS colorTest.parseColor("hsla(0, 75%, 75%, 0.2)") is "rgba(239, 143, 143, 0.2)" PASS colorTest.parseColor("hsla(30, 75%, 75%, 0.2)") is "rgba(239, 191, 143, 0.2)" PASS colorTest.parseColor("hsla(60, 75%, 75%, 0.2)") is "rgba(239, 239, 143, 0.2)" -FAIL colorTest.parseColor("hsla(90, 75%, 75%, 0.2)") should be rgba(191, 239, 143, 0.2). Was rgba(192, 239, 143, 0.2). +PASS colorTest.parseColor("hsla(90, 75%, 75%, 0.2)") is "rgba(191, 239, 143, 0.2)" PASS colorTest.parseColor("hsla(120, 75%, 75%, 0.2)") is "rgba(143, 239, 143, 0.2)" -FAIL colorTest.parseColor("hsla(150, 75%, 75%, 0.2)") should be rgba(143, 239, 191, 0.2). Was rgba(143, 239, 192, 0.2). +PASS colorTest.parseColor("hsla(150, 75%, 75%, 0.2)") is "rgba(143, 239, 191, 0.2)" PASS colorTest.parseColor("hsla(180, 75%, 75%, 0.2)") is "rgba(143, 239, 239, 0.2)" PASS colorTest.parseColor("hsla(210, 75%, 75%, 0.2)") is "rgba(143, 191, 239, 0.2)" PASS colorTest.parseColor("hsla(240, 75%, 75%, 0.2)") is "rgba(143, 143, 239, 0.2)" PASS colorTest.parseColor("hsla(270, 75%, 75%, 0.2)") is "rgba(191, 143, 239, 0.2)" PASS colorTest.parseColor("hsla(300, 75%, 75%, 0.2)") is "rgba(239, 143, 239, 0.2)" -FAIL colorTest.parseColor("hsla(330, 75%, 75%, 0.2)") should be rgba(239, 143, 191, 0.2). Was rgba(239, 143, 192, 0.2). +PASS colorTest.parseColor("hsla(330, 75%, 75%, 0.2)") is "rgba(239, 143, 191, 0.2)" PASS colorTest.parseColor("hsla(0, 87.5%, 75%, 0.2)") is "rgba(247, 135, 135, 0.2)" PASS colorTest.parseColor("hsla(30, 87.5%, 75%, 0.2)") is "rgba(247, 191, 135, 0.2)" PASS colorTest.parseColor("hsla(60, 87.5%, 75%, 0.2)") is "rgba(247, 247, 135, 0.2)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 75%, 0.2)") should be rgba(191, 247, 135, 0.2). Was rgba(192, 247, 135, 0.2). +PASS colorTest.parseColor("hsla(90, 87.5%, 75%, 0.2)") is "rgba(191, 247, 135, 0.2)" PASS colorTest.parseColor("hsla(120, 87.5%, 75%, 0.2)") is "rgba(135, 247, 135, 0.2)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 75%, 0.2)") should be rgba(135, 247, 191, 0.2). Was rgba(135, 247, 192, 0.2). +PASS colorTest.parseColor("hsla(150, 87.5%, 75%, 0.2)") is "rgba(135, 247, 191, 0.2)" PASS colorTest.parseColor("hsla(180, 87.5%, 75%, 0.2)") is "rgba(135, 247, 247, 0.2)" PASS colorTest.parseColor("hsla(210, 87.5%, 75%, 0.2)") is "rgba(135, 191, 247, 0.2)" PASS colorTest.parseColor("hsla(240, 87.5%, 75%, 0.2)") is "rgba(135, 135, 247, 0.2)" PASS colorTest.parseColor("hsla(270, 87.5%, 75%, 0.2)") is "rgba(191, 135, 247, 0.2)" PASS colorTest.parseColor("hsla(300, 87.5%, 75%, 0.2)") is "rgba(247, 135, 247, 0.2)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 75%, 0.2)") should be rgba(247, 135, 191, 0.2). Was rgba(247, 135, 192, 0.2). +PASS colorTest.parseColor("hsla(330, 87.5%, 75%, 0.2)") is "rgba(247, 135, 191, 0.2)" PASS colorTest.parseColor("hsla(0, 100%, 75%, 0.2)") is "rgba(255, 127, 127, 0.2)" PASS colorTest.parseColor("hsla(30, 100%, 75%, 0.2)") is "rgba(255, 191, 127, 0.2)" PASS colorTest.parseColor("hsla(60, 100%, 75%, 0.2)") is "rgba(255, 255, 127, 0.2)" -FAIL colorTest.parseColor("hsla(90, 100%, 75%, 0.2)") should be rgba(191, 255, 127, 0.2). Was rgba(192, 255, 127, 0.2). +PASS colorTest.parseColor("hsla(90, 100%, 75%, 0.2)") is "rgba(191, 255, 127, 0.2)" PASS colorTest.parseColor("hsla(120, 100%, 75%, 0.2)") is "rgba(127, 255, 127, 0.2)" -FAIL colorTest.parseColor("hsla(150, 100%, 75%, 0.2)") should be rgba(127, 255, 191, 0.2). Was rgba(127, 255, 192, 0.2). +PASS colorTest.parseColor("hsla(150, 100%, 75%, 0.2)") is "rgba(127, 255, 191, 0.2)" PASS colorTest.parseColor("hsla(180, 100%, 75%, 0.2)") is "rgba(127, 255, 255, 0.2)" PASS colorTest.parseColor("hsla(210, 100%, 75%, 0.2)") is "rgba(127, 191, 255, 0.2)" PASS colorTest.parseColor("hsla(240, 100%, 75%, 0.2)") is "rgba(127, 127, 255, 0.2)" PASS colorTest.parseColor("hsla(270, 100%, 75%, 0.2)") is "rgba(191, 127, 255, 0.2)" PASS colorTest.parseColor("hsla(300, 100%, 75%, 0.2)") is "rgba(255, 127, 255, 0.2)" -FAIL colorTest.parseColor("hsla(330, 100%, 75%, 0.2)") should be rgba(255, 127, 191, 0.2). Was rgba(255, 127, 192, 0.2). +PASS colorTest.parseColor("hsla(330, 100%, 75%, 0.2)") is "rgba(255, 127, 191, 0.2)" PASS colorTest.parseColor("hsla(0, 0%, 87.5%, 0.2)") is "rgba(223, 223, 223, 0.2)" PASS colorTest.parseColor("hsla(30, 0%, 87.5%, 0.2)") is "rgba(223, 223, 223, 0.2)" PASS colorTest.parseColor("hsla(60, 0%, 87.5%, 0.2)") is "rgba(223, 223, 223, 0.2)" @@ -643,75 +643,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 12.5%, 0)") is "rgba(43, 19, 19, 0)" PASS colorTest.parseColor("hsla(30, 37.5%, 12.5%, 0)") is "rgba(43, 31, 19, 0)" PASS colorTest.parseColor("hsla(60, 37.5%, 12.5%, 0)") is "rgba(43, 43, 19, 0)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 12.5%, 0)") should be rgba(31, 43, 19, 0). Was rgba(32, 43, 19, 0). +PASS colorTest.parseColor("hsla(90, 37.5%, 12.5%, 0)") is "rgba(31, 43, 19, 0)" PASS colorTest.parseColor("hsla(120, 37.5%, 12.5%, 0)") is "rgba(19, 43, 19, 0)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 12.5%, 0)") should be rgba(19, 43, 31, 0). Was rgba(19, 43, 32, 0). +PASS colorTest.parseColor("hsla(150, 37.5%, 12.5%, 0)") is "rgba(19, 43, 31, 0)" PASS colorTest.parseColor("hsla(180, 37.5%, 12.5%, 0)") is "rgba(19, 43, 43, 0)" PASS colorTest.parseColor("hsla(210, 37.5%, 12.5%, 0)") is "rgba(19, 31, 43, 0)" PASS colorTest.parseColor("hsla(240, 37.5%, 12.5%, 0)") is "rgba(19, 19, 43, 0)" PASS colorTest.parseColor("hsla(270, 37.5%, 12.5%, 0)") is "rgba(31, 19, 43, 0)" PASS colorTest.parseColor("hsla(300, 37.5%, 12.5%, 0)") is "rgba(43, 19, 43, 0)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 12.5%, 0)") should be rgba(43, 19, 31, 0). Was rgba(43, 19, 32, 0). +PASS colorTest.parseColor("hsla(330, 37.5%, 12.5%, 0)") is "rgba(43, 19, 31, 0)" PASS colorTest.parseColor("hsla(0, 50%, 12.5%, 0)") is "rgba(47, 15, 15, 0)" PASS colorTest.parseColor("hsla(30, 50%, 12.5%, 0)") is "rgba(47, 31, 15, 0)" PASS colorTest.parseColor("hsla(60, 50%, 12.5%, 0)") is "rgba(47, 47, 15, 0)" -FAIL colorTest.parseColor("hsla(90, 50%, 12.5%, 0)") should be rgba(31, 47, 15, 0). Was rgba(32, 47, 15, 0). +PASS colorTest.parseColor("hsla(90, 50%, 12.5%, 0)") is "rgba(31, 47, 15, 0)" PASS colorTest.parseColor("hsla(120, 50%, 12.5%, 0)") is "rgba(15, 47, 15, 0)" -FAIL colorTest.parseColor("hsla(150, 50%, 12.5%, 0)") should be rgba(15, 47, 31, 0). Was rgba(15, 47, 32, 0). +PASS colorTest.parseColor("hsla(150, 50%, 12.5%, 0)") is "rgba(15, 47, 31, 0)" PASS colorTest.parseColor("hsla(180, 50%, 12.5%, 0)") is "rgba(15, 47, 47, 0)" PASS colorTest.parseColor("hsla(210, 50%, 12.5%, 0)") is "rgba(15, 31, 47, 0)" PASS colorTest.parseColor("hsla(240, 50%, 12.5%, 0)") is "rgba(15, 15, 47, 0)" PASS colorTest.parseColor("hsla(270, 50%, 12.5%, 0)") is "rgba(31, 15, 47, 0)" PASS colorTest.parseColor("hsla(300, 50%, 12.5%, 0)") is "rgba(47, 15, 47, 0)" -FAIL colorTest.parseColor("hsla(330, 50%, 12.5%, 0)") should be rgba(47, 15, 31, 0). Was rgba(47, 15, 32, 0). +PASS colorTest.parseColor("hsla(330, 50%, 12.5%, 0)") is "rgba(47, 15, 31, 0)" PASS colorTest.parseColor("hsla(0, 62.5%, 12.5%, 0)") is "rgba(51, 11, 11, 0)" PASS colorTest.parseColor("hsla(30, 62.5%, 12.5%, 0)") is "rgba(51, 31, 11, 0)" PASS colorTest.parseColor("hsla(60, 62.5%, 12.5%, 0)") is "rgba(51, 51, 11, 0)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 12.5%, 0)") should be rgba(31, 51, 11, 0). Was rgba(32, 51, 11, 0). +PASS colorTest.parseColor("hsla(90, 62.5%, 12.5%, 0)") is "rgba(31, 51, 11, 0)" PASS colorTest.parseColor("hsla(120, 62.5%, 12.5%, 0)") is "rgba(11, 51, 11, 0)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 12.5%, 0)") should be rgba(11, 51, 31, 0). Was rgba(11, 51, 32, 0). +PASS colorTest.parseColor("hsla(150, 62.5%, 12.5%, 0)") is "rgba(11, 51, 31, 0)" PASS colorTest.parseColor("hsla(180, 62.5%, 12.5%, 0)") is "rgba(11, 51, 51, 0)" PASS colorTest.parseColor("hsla(210, 62.5%, 12.5%, 0)") is "rgba(11, 31, 51, 0)" PASS colorTest.parseColor("hsla(240, 62.5%, 12.5%, 0)") is "rgba(11, 11, 51, 0)" PASS colorTest.parseColor("hsla(270, 62.5%, 12.5%, 0)") is "rgba(31, 11, 51, 0)" PASS colorTest.parseColor("hsla(300, 62.5%, 12.5%, 0)") is "rgba(51, 11, 51, 0)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 12.5%, 0)") should be rgba(51, 11, 31, 0). Was rgba(51, 11, 32, 0). +PASS colorTest.parseColor("hsla(330, 62.5%, 12.5%, 0)") is "rgba(51, 11, 31, 0)" PASS colorTest.parseColor("hsla(0, 75%, 12.5%, 0)") is "rgba(55, 7, 7, 0)" PASS colorTest.parseColor("hsla(30, 75%, 12.5%, 0)") is "rgba(55, 31, 7, 0)" PASS colorTest.parseColor("hsla(60, 75%, 12.5%, 0)") is "rgba(55, 55, 7, 0)" -FAIL colorTest.parseColor("hsla(90, 75%, 12.5%, 0)") should be rgba(31, 55, 7, 0). Was rgba(32, 55, 7, 0). +PASS colorTest.parseColor("hsla(90, 75%, 12.5%, 0)") is "rgba(31, 55, 7, 0)" PASS colorTest.parseColor("hsla(120, 75%, 12.5%, 0)") is "rgba(7, 55, 7, 0)" -FAIL colorTest.parseColor("hsla(150, 75%, 12.5%, 0)") should be rgba(7, 55, 31, 0). Was rgba(7, 55, 32, 0). +PASS colorTest.parseColor("hsla(150, 75%, 12.5%, 0)") is "rgba(7, 55, 31, 0)" PASS colorTest.parseColor("hsla(180, 75%, 12.5%, 0)") is "rgba(7, 55, 55, 0)" PASS colorTest.parseColor("hsla(210, 75%, 12.5%, 0)") is "rgba(7, 31, 55, 0)" PASS colorTest.parseColor("hsla(240, 75%, 12.5%, 0)") is "rgba(7, 7, 55, 0)" PASS colorTest.parseColor("hsla(270, 75%, 12.5%, 0)") is "rgba(31, 7, 55, 0)" PASS colorTest.parseColor("hsla(300, 75%, 12.5%, 0)") is "rgba(55, 7, 55, 0)" -FAIL colorTest.parseColor("hsla(330, 75%, 12.5%, 0)") should be rgba(55, 7, 31, 0). Was rgba(55, 7, 32, 0). +PASS colorTest.parseColor("hsla(330, 75%, 12.5%, 0)") is "rgba(55, 7, 31, 0)" PASS colorTest.parseColor("hsla(0, 87.5%, 12.5%, 0)") is "rgba(59, 3, 3, 0)" PASS colorTest.parseColor("hsla(30, 87.5%, 12.5%, 0)") is "rgba(59, 31, 3, 0)" PASS colorTest.parseColor("hsla(60, 87.5%, 12.5%, 0)") is "rgba(59, 59, 3, 0)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 12.5%, 0)") should be rgba(31, 59, 3, 0). Was rgba(32, 59, 3, 0). +PASS colorTest.parseColor("hsla(90, 87.5%, 12.5%, 0)") is "rgba(31, 59, 3, 0)" PASS colorTest.parseColor("hsla(120, 87.5%, 12.5%, 0)") is "rgba(3, 59, 3, 0)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 12.5%, 0)") should be rgba(3, 59, 31, 0). Was rgba(3, 59, 32, 0). +PASS colorTest.parseColor("hsla(150, 87.5%, 12.5%, 0)") is "rgba(3, 59, 31, 0)" PASS colorTest.parseColor("hsla(180, 87.5%, 12.5%, 0)") is "rgba(3, 59, 59, 0)" PASS colorTest.parseColor("hsla(210, 87.5%, 12.5%, 0)") is "rgba(3, 31, 59, 0)" PASS colorTest.parseColor("hsla(240, 87.5%, 12.5%, 0)") is "rgba(3, 3, 59, 0)" PASS colorTest.parseColor("hsla(270, 87.5%, 12.5%, 0)") is "rgba(31, 3, 59, 0)" PASS colorTest.parseColor("hsla(300, 87.5%, 12.5%, 0)") is "rgba(59, 3, 59, 0)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 12.5%, 0)") should be rgba(59, 3, 31, 0). Was rgba(59, 3, 32, 0). +PASS colorTest.parseColor("hsla(330, 87.5%, 12.5%, 0)") is "rgba(59, 3, 31, 0)" PASS colorTest.parseColor("hsla(0, 100%, 12.5%, 0)") is "rgba(63, 0, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 12.5%, 0)") is "rgba(63, 31, 0, 0)" PASS colorTest.parseColor("hsla(60, 100%, 12.5%, 0)") is "rgba(63, 63, 0, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 12.5%, 0)") should be rgba(31, 63, 0, 0). Was rgba(32, 63, 0, 0). +PASS colorTest.parseColor("hsla(90, 100%, 12.5%, 0)") is "rgba(31, 63, 0, 0)" PASS colorTest.parseColor("hsla(120, 100%, 12.5%, 0)") is "rgba(0, 63, 0, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 12.5%, 0)") should be rgba(0, 63, 31, 0). Was rgba(0, 63, 32, 0). +PASS colorTest.parseColor("hsla(150, 100%, 12.5%, 0)") is "rgba(0, 63, 31, 0)" PASS colorTest.parseColor("hsla(180, 100%, 12.5%, 0)") is "rgba(0, 63, 63, 0)" PASS colorTest.parseColor("hsla(210, 100%, 12.5%, 0)") is "rgba(0, 31, 63, 0)" PASS colorTest.parseColor("hsla(240, 100%, 12.5%, 0)") is "rgba(0, 0, 63, 0)" PASS colorTest.parseColor("hsla(270, 100%, 12.5%, 0)") is "rgba(31, 0, 63, 0)" PASS colorTest.parseColor("hsla(300, 100%, 12.5%, 0)") is "rgba(63, 0, 63, 0)" -FAIL colorTest.parseColor("hsla(330, 100%, 12.5%, 0)") should be rgba(63, 0, 31, 0). Was rgba(63, 0, 32, 0). +PASS colorTest.parseColor("hsla(330, 100%, 12.5%, 0)") is "rgba(63, 0, 31, 0)" PASS colorTest.parseColor("hsla(0, 0%, 25%, 0)") is "rgba(63, 63, 63, 0)" PASS colorTest.parseColor("hsla(30, 0%, 25%, 0)") is "rgba(63, 63, 63, 0)" PASS colorTest.parseColor("hsla(60, 0%, 25%, 0)") is "rgba(63, 63, 63, 0)" @@ -751,75 +751,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 25%, 0)") is "rgba(87, 39, 39, 0)" PASS colorTest.parseColor("hsla(30, 37.5%, 25%, 0)") is "rgba(87, 63, 39, 0)" PASS colorTest.parseColor("hsla(60, 37.5%, 25%, 0)") is "rgba(87, 87, 39, 0)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 25%, 0)") should be rgba(63, 87, 39, 0). Was rgba(64, 87, 39, 0). +PASS colorTest.parseColor("hsla(90, 37.5%, 25%, 0)") is "rgba(63, 87, 39, 0)" PASS colorTest.parseColor("hsla(120, 37.5%, 25%, 0)") is "rgba(39, 87, 39, 0)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 25%, 0)") should be rgba(39, 87, 63, 0). Was rgba(39, 87, 64, 0). +PASS colorTest.parseColor("hsla(150, 37.5%, 25%, 0)") is "rgba(39, 87, 63, 0)" PASS colorTest.parseColor("hsla(180, 37.5%, 25%, 0)") is "rgba(39, 87, 87, 0)" PASS colorTest.parseColor("hsla(210, 37.5%, 25%, 0)") is "rgba(39, 63, 87, 0)" PASS colorTest.parseColor("hsla(240, 37.5%, 25%, 0)") is "rgba(39, 39, 87, 0)" PASS colorTest.parseColor("hsla(270, 37.5%, 25%, 0)") is "rgba(63, 39, 87, 0)" PASS colorTest.parseColor("hsla(300, 37.5%, 25%, 0)") is "rgba(87, 39, 87, 0)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 25%, 0)") should be rgba(87, 39, 63, 0). Was rgba(87, 39, 64, 0). +PASS colorTest.parseColor("hsla(330, 37.5%, 25%, 0)") is "rgba(87, 39, 63, 0)" PASS colorTest.parseColor("hsla(0, 50%, 25%, 0)") is "rgba(95, 31, 31, 0)" PASS colorTest.parseColor("hsla(30, 50%, 25%, 0)") is "rgba(95, 63, 31, 0)" PASS colorTest.parseColor("hsla(60, 50%, 25%, 0)") is "rgba(95, 95, 31, 0)" -FAIL colorTest.parseColor("hsla(90, 50%, 25%, 0)") should be rgba(63, 95, 31, 0). Was rgba(64, 95, 31, 0). +PASS colorTest.parseColor("hsla(90, 50%, 25%, 0)") is "rgba(63, 95, 31, 0)" PASS colorTest.parseColor("hsla(120, 50%, 25%, 0)") is "rgba(31, 95, 31, 0)" -FAIL colorTest.parseColor("hsla(150, 50%, 25%, 0)") should be rgba(31, 95, 63, 0). Was rgba(31, 95, 64, 0). +PASS colorTest.parseColor("hsla(150, 50%, 25%, 0)") is "rgba(31, 95, 63, 0)" PASS colorTest.parseColor("hsla(180, 50%, 25%, 0)") is "rgba(31, 95, 95, 0)" PASS colorTest.parseColor("hsla(210, 50%, 25%, 0)") is "rgba(31, 63, 95, 0)" PASS colorTest.parseColor("hsla(240, 50%, 25%, 0)") is "rgba(31, 31, 95, 0)" PASS colorTest.parseColor("hsla(270, 50%, 25%, 0)") is "rgba(63, 31, 95, 0)" PASS colorTest.parseColor("hsla(300, 50%, 25%, 0)") is "rgba(95, 31, 95, 0)" -FAIL colorTest.parseColor("hsla(330, 50%, 25%, 0)") should be rgba(95, 31, 63, 0). Was rgba(95, 31, 64, 0). +PASS colorTest.parseColor("hsla(330, 50%, 25%, 0)") is "rgba(95, 31, 63, 0)" PASS colorTest.parseColor("hsla(0, 62.5%, 25%, 0)") is "rgba(103, 23, 23, 0)" PASS colorTest.parseColor("hsla(30, 62.5%, 25%, 0)") is "rgba(103, 63, 23, 0)" PASS colorTest.parseColor("hsla(60, 62.5%, 25%, 0)") is "rgba(103, 103, 23, 0)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 25%, 0)") should be rgba(63, 103, 23, 0). Was rgba(64, 103, 23, 0). +PASS colorTest.parseColor("hsla(90, 62.5%, 25%, 0)") is "rgba(63, 103, 23, 0)" PASS colorTest.parseColor("hsla(120, 62.5%, 25%, 0)") is "rgba(23, 103, 23, 0)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 25%, 0)") should be rgba(23, 103, 63, 0). Was rgba(23, 103, 64, 0). +PASS colorTest.parseColor("hsla(150, 62.5%, 25%, 0)") is "rgba(23, 103, 63, 0)" PASS colorTest.parseColor("hsla(180, 62.5%, 25%, 0)") is "rgba(23, 103, 103, 0)" PASS colorTest.parseColor("hsla(210, 62.5%, 25%, 0)") is "rgba(23, 63, 103, 0)" PASS colorTest.parseColor("hsla(240, 62.5%, 25%, 0)") is "rgba(23, 23, 103, 0)" PASS colorTest.parseColor("hsla(270, 62.5%, 25%, 0)") is "rgba(63, 23, 103, 0)" PASS colorTest.parseColor("hsla(300, 62.5%, 25%, 0)") is "rgba(103, 23, 103, 0)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 25%, 0)") should be rgba(103, 23, 63, 0). Was rgba(103, 23, 64, 0). +PASS colorTest.parseColor("hsla(330, 62.5%, 25%, 0)") is "rgba(103, 23, 63, 0)" PASS colorTest.parseColor("hsla(0, 75%, 25%, 0)") is "rgba(111, 15, 15, 0)" PASS colorTest.parseColor("hsla(30, 75%, 25%, 0)") is "rgba(111, 63, 15, 0)" PASS colorTest.parseColor("hsla(60, 75%, 25%, 0)") is "rgba(111, 111, 15, 0)" -FAIL colorTest.parseColor("hsla(90, 75%, 25%, 0)") should be rgba(63, 111, 15, 0). Was rgba(64, 111, 15, 0). +PASS colorTest.parseColor("hsla(90, 75%, 25%, 0)") is "rgba(63, 111, 15, 0)" PASS colorTest.parseColor("hsla(120, 75%, 25%, 0)") is "rgba(15, 111, 15, 0)" -FAIL colorTest.parseColor("hsla(150, 75%, 25%, 0)") should be rgba(15, 111, 63, 0). Was rgba(15, 111, 64, 0). +PASS colorTest.parseColor("hsla(150, 75%, 25%, 0)") is "rgba(15, 111, 63, 0)" PASS colorTest.parseColor("hsla(180, 75%, 25%, 0)") is "rgba(15, 111, 111, 0)" PASS colorTest.parseColor("hsla(210, 75%, 25%, 0)") is "rgba(15, 63, 111, 0)" PASS colorTest.parseColor("hsla(240, 75%, 25%, 0)") is "rgba(15, 15, 111, 0)" PASS colorTest.parseColor("hsla(270, 75%, 25%, 0)") is "rgba(63, 15, 111, 0)" PASS colorTest.parseColor("hsla(300, 75%, 25%, 0)") is "rgba(111, 15, 111, 0)" -FAIL colorTest.parseColor("hsla(330, 75%, 25%, 0)") should be rgba(111, 15, 63, 0). Was rgba(111, 15, 64, 0). +PASS colorTest.parseColor("hsla(330, 75%, 25%, 0)") is "rgba(111, 15, 63, 0)" PASS colorTest.parseColor("hsla(0, 87.5%, 25%, 0)") is "rgba(119, 7, 7, 0)" PASS colorTest.parseColor("hsla(30, 87.5%, 25%, 0)") is "rgba(119, 63, 7, 0)" PASS colorTest.parseColor("hsla(60, 87.5%, 25%, 0)") is "rgba(119, 119, 7, 0)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 25%, 0)") should be rgba(63, 119, 7, 0). Was rgba(64, 119, 7, 0). +PASS colorTest.parseColor("hsla(90, 87.5%, 25%, 0)") is "rgba(63, 119, 7, 0)" PASS colorTest.parseColor("hsla(120, 87.5%, 25%, 0)") is "rgba(7, 119, 7, 0)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 25%, 0)") should be rgba(7, 119, 63, 0). Was rgba(7, 119, 64, 0). +PASS colorTest.parseColor("hsla(150, 87.5%, 25%, 0)") is "rgba(7, 119, 63, 0)" PASS colorTest.parseColor("hsla(180, 87.5%, 25%, 0)") is "rgba(7, 119, 119, 0)" PASS colorTest.parseColor("hsla(210, 87.5%, 25%, 0)") is "rgba(7, 63, 119, 0)" PASS colorTest.parseColor("hsla(240, 87.5%, 25%, 0)") is "rgba(7, 7, 119, 0)" PASS colorTest.parseColor("hsla(270, 87.5%, 25%, 0)") is "rgba(63, 7, 119, 0)" PASS colorTest.parseColor("hsla(300, 87.5%, 25%, 0)") is "rgba(119, 7, 119, 0)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 25%, 0)") should be rgba(119, 7, 63, 0). Was rgba(119, 7, 64, 0). +PASS colorTest.parseColor("hsla(330, 87.5%, 25%, 0)") is "rgba(119, 7, 63, 0)" PASS colorTest.parseColor("hsla(0, 100%, 25%, 0)") is "rgba(127, 0, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 25%, 0)") is "rgba(127, 63, 0, 0)" PASS colorTest.parseColor("hsla(60, 100%, 25%, 0)") is "rgba(127, 127, 0, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 25%, 0)") should be rgba(63, 127, 0, 0). Was rgba(64, 127, 0, 0). +PASS colorTest.parseColor("hsla(90, 100%, 25%, 0)") is "rgba(63, 127, 0, 0)" PASS colorTest.parseColor("hsla(120, 100%, 25%, 0)") is "rgba(0, 127, 0, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 25%, 0)") should be rgba(0, 127, 63, 0). Was rgba(0, 127, 64, 0). +PASS colorTest.parseColor("hsla(150, 100%, 25%, 0)") is "rgba(0, 127, 63, 0)" PASS colorTest.parseColor("hsla(180, 100%, 25%, 0)") is "rgba(0, 127, 127, 0)" PASS colorTest.parseColor("hsla(210, 100%, 25%, 0)") is "rgba(0, 63, 127, 0)" PASS colorTest.parseColor("hsla(240, 100%, 25%, 0)") is "rgba(0, 0, 127, 0)" PASS colorTest.parseColor("hsla(270, 100%, 25%, 0)") is "rgba(63, 0, 127, 0)" PASS colorTest.parseColor("hsla(300, 100%, 25%, 0)") is "rgba(127, 0, 127, 0)" -FAIL colorTest.parseColor("hsla(330, 100%, 25%, 0)") should be rgba(127, 0, 63, 0). Was rgba(127, 0, 64, 0). +PASS colorTest.parseColor("hsla(330, 100%, 25%, 0)") is "rgba(127, 0, 63, 0)" PASS colorTest.parseColor("hsla(0, 0%, 37.5%, 0)") is "rgba(95, 95, 95, 0)" PASS colorTest.parseColor("hsla(30, 0%, 37.5%, 0)") is "rgba(95, 95, 95, 0)" PASS colorTest.parseColor("hsla(60, 0%, 37.5%, 0)") is "rgba(95, 95, 95, 0)" @@ -847,87 +847,87 @@ PASS colorTest.parseColor("hsla(0, 25%, 37.5%, 0)") is "rgba(119, 71, 71, 0)" PASS colorTest.parseColor("hsla(30, 25%, 37.5%, 0)") is "rgba(119, 95, 71, 0)" PASS colorTest.parseColor("hsla(60, 25%, 37.5%, 0)") is "rgba(119, 119, 71, 0)" -FAIL colorTest.parseColor("hsla(90, 25%, 37.5%, 0)") should be rgba(95, 119, 71, 0). Was rgba(96, 119, 71, 0). +PASS colorTest.parseColor("hsla(90, 25%, 37.5%, 0)") is "rgba(95, 119, 71, 0)" PASS colorTest.parseColor("hsla(120, 25%, 37.5%, 0)") is "rgba(71, 119, 71, 0)" -FAIL colorTest.parseColor("hsla(150, 25%, 37.5%, 0)") should be rgba(71, 119, 95, 0). Was rgba(71, 119, 96, 0). +PASS colorTest.parseColor("hsla(150, 25%, 37.5%, 0)") is "rgba(71, 119, 95, 0)" PASS colorTest.parseColor("hsla(180, 25%, 37.5%, 0)") is "rgba(71, 119, 119, 0)" PASS colorTest.parseColor("hsla(210, 25%, 37.5%, 0)") is "rgba(71, 95, 119, 0)" PASS colorTest.parseColor("hsla(240, 25%, 37.5%, 0)") is "rgba(71, 71, 119, 0)" PASS colorTest.parseColor("hsla(270, 25%, 37.5%, 0)") is "rgba(95, 71, 119, 0)" PASS colorTest.parseColor("hsla(300, 25%, 37.5%, 0)") is "rgba(119, 71, 119, 0)" -FAIL colorTest.parseColor("hsla(330, 25%, 37.5%, 0)") should be rgba(119, 71, 95, 0). Was rgba(119, 71, 96, 0). +PASS colorTest.parseColor("hsla(330, 25%, 37.5%, 0)") is "rgba(119, 71, 95, 0)" PASS colorTest.parseColor("hsla(0, 37.5%, 37.5%, 0)") is "rgba(131, 59, 59, 0)" PASS colorTest.parseColor("hsla(30, 37.5%, 37.5%, 0)") is "rgba(131, 95, 59, 0)" PASS colorTest.parseColor("hsla(60, 37.5%, 37.5%, 0)") is "rgba(131, 131, 59, 0)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 37.5%, 0)") should be rgba(95, 131, 59, 0). Was rgba(96, 131, 59, 0). +PASS colorTest.parseColor("hsla(90, 37.5%, 37.5%, 0)") is "rgba(95, 131, 59, 0)" PASS colorTest.parseColor("hsla(120, 37.5%, 37.5%, 0)") is "rgba(59, 131, 59, 0)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 37.5%, 0)") should be rgba(59, 131, 95, 0). Was rgba(59, 131, 96, 0). +PASS colorTest.parseColor("hsla(150, 37.5%, 37.5%, 0)") is "rgba(59, 131, 95, 0)" PASS colorTest.parseColor("hsla(180, 37.5%, 37.5%, 0)") is "rgba(59, 131, 131, 0)" PASS colorTest.parseColor("hsla(210, 37.5%, 37.5%, 0)") is "rgba(59, 95, 131, 0)" PASS colorTest.parseColor("hsla(240, 37.5%, 37.5%, 0)") is "rgba(59, 59, 131, 0)" PASS colorTest.parseColor("hsla(270, 37.5%, 37.5%, 0)") is "rgba(95, 59, 131, 0)" PASS colorTest.parseColor("hsla(300, 37.5%, 37.5%, 0)") is "rgba(131, 59, 131, 0)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 37.5%, 0)") should be rgba(131, 59, 95, 0). Was rgba(131, 59, 96, 0). +PASS colorTest.parseColor("hsla(330, 37.5%, 37.5%, 0)") is "rgba(131, 59, 95, 0)" PASS colorTest.parseColor("hsla(0, 50%, 37.5%, 0)") is "rgba(143, 47, 47, 0)" PASS colorTest.parseColor("hsla(30, 50%, 37.5%, 0)") is "rgba(143, 95, 47, 0)" PASS colorTest.parseColor("hsla(60, 50%, 37.5%, 0)") is "rgba(143, 143, 47, 0)" -FAIL colorTest.parseColor("hsla(90, 50%, 37.5%, 0)") should be rgba(95, 143, 47, 0). Was rgba(96, 143, 47, 0). +PASS colorTest.parseColor("hsla(90, 50%, 37.5%, 0)") is "rgba(95, 143, 47, 0)" PASS colorTest.parseColor("hsla(120, 50%, 37.5%, 0)") is "rgba(47, 143, 47, 0)" -FAIL colorTest.parseColor("hsla(150, 50%, 37.5%, 0)") should be rgba(47, 143, 95, 0). Was rgba(47, 143, 96, 0). +PASS colorTest.parseColor("hsla(150, 50%, 37.5%, 0)") is "rgba(47, 143, 95, 0)" PASS colorTest.parseColor("hsla(180, 50%, 37.5%, 0)") is "rgba(47, 143, 143, 0)" PASS colorTest.parseColor("hsla(210, 50%, 37.5%, 0)") is "rgba(47, 95, 143, 0)" PASS colorTest.parseColor("hsla(240, 50%, 37.5%, 0)") is "rgba(47, 47, 143, 0)" PASS colorTest.parseColor("hsla(270, 50%, 37.5%, 0)") is "rgba(95, 47, 143, 0)" PASS colorTest.parseColor("hsla(300, 50%, 37.5%, 0)") is "rgba(143, 47, 143, 0)" -FAIL colorTest.parseColor("hsla(330, 50%, 37.5%, 0)") should be rgba(143, 47, 95, 0). Was rgba(143, 47, 96, 0). +PASS colorTest.parseColor("hsla(330, 50%, 37.5%, 0)") is "rgba(143, 47, 95, 0)" PASS colorTest.parseColor("hsla(0, 62.5%, 37.5%, 0)") is "rgba(155, 35, 35, 0)" PASS colorTest.parseColor("hsla(30, 62.5%, 37.5%, 0)") is "rgba(155, 95, 35, 0)" PASS colorTest.parseColor("hsla(60, 62.5%, 37.5%, 0)") is "rgba(155, 155, 35, 0)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 37.5%, 0)") should be rgba(95, 155, 35, 0). Was rgba(96, 155, 35, 0). +PASS colorTest.parseColor("hsla(90, 62.5%, 37.5%, 0)") is "rgba(95, 155, 35, 0)" PASS colorTest.parseColor("hsla(120, 62.5%, 37.5%, 0)") is "rgba(35, 155, 35, 0)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 37.5%, 0)") should be rgba(35, 155, 95, 0). Was rgba(35, 155, 96, 0). +PASS colorTest.parseColor("hsla(150, 62.5%, 37.5%, 0)") is "rgba(35, 155, 95, 0)" PASS colorTest.parseColor("hsla(180, 62.5%, 37.5%, 0)") is "rgba(35, 155, 155, 0)" PASS colorTest.parseColor("hsla(210, 62.5%, 37.5%, 0)") is "rgba(35, 95, 155, 0)" PASS colorTest.parseColor("hsla(240, 62.5%, 37.5%, 0)") is "rgba(35, 35, 155, 0)" PASS colorTest.parseColor("hsla(270, 62.5%, 37.5%, 0)") is "rgba(95, 35, 155, 0)" PASS colorTest.parseColor("hsla(300, 62.5%, 37.5%, 0)") is "rgba(155, 35, 155, 0)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 37.5%, 0)") should be rgba(155, 35, 95, 0). Was rgba(155, 35, 96, 0). +PASS colorTest.parseColor("hsla(330, 62.5%, 37.5%, 0)") is "rgba(155, 35, 95, 0)" PASS colorTest.parseColor("hsla(0, 75%, 37.5%, 0)") is "rgba(167, 23, 23, 0)" PASS colorTest.parseColor("hsla(30, 75%, 37.5%, 0)") is "rgba(167, 95, 23, 0)" PASS colorTest.parseColor("hsla(60, 75%, 37.5%, 0)") is "rgba(167, 167, 23, 0)" -FAIL colorTest.parseColor("hsla(90, 75%, 37.5%, 0)") should be rgba(95, 167, 23, 0). Was rgba(96, 167, 23, 0). +PASS colorTest.parseColor("hsla(90, 75%, 37.5%, 0)") is "rgba(95, 167, 23, 0)" PASS colorTest.parseColor("hsla(120, 75%, 37.5%, 0)") is "rgba(23, 167, 23, 0)" -FAIL colorTest.parseColor("hsla(150, 75%, 37.5%, 0)") should be rgba(23, 167, 95, 0). Was rgba(23, 167, 96, 0). +PASS colorTest.parseColor("hsla(150, 75%, 37.5%, 0)") is "rgba(23, 167, 95, 0)" PASS colorTest.parseColor("hsla(180, 75%, 37.5%, 0)") is "rgba(23, 167, 167, 0)" PASS colorTest.parseColor("hsla(210, 75%, 37.5%, 0)") is "rgba(23, 95, 167, 0)" PASS colorTest.parseColor("hsla(240, 75%, 37.5%, 0)") is "rgba(23, 23, 167, 0)" PASS colorTest.parseColor("hsla(270, 75%, 37.5%, 0)") is "rgba(95, 23, 167, 0)" PASS colorTest.parseColor("hsla(300, 75%, 37.5%, 0)") is "rgba(167, 23, 167, 0)" -FAIL colorTest.parseColor("hsla(330, 75%, 37.5%, 0)") should be rgba(167, 23, 95, 0). Was rgba(167, 23, 96, 0). +PASS colorTest.parseColor("hsla(330, 75%, 37.5%, 0)") is "rgba(167, 23, 95, 0)" PASS colorTest.parseColor("hsla(0, 87.5%, 37.5%, 0)") is "rgba(179, 11, 11, 0)" PASS colorTest.parseColor("hsla(30, 87.5%, 37.5%, 0)") is "rgba(179, 95, 11, 0)" PASS colorTest.parseColor("hsla(60, 87.5%, 37.5%, 0)") is "rgba(179, 179, 11, 0)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 37.5%, 0)") should be rgba(95, 179, 11, 0). Was rgba(96, 179, 11, 0). +PASS colorTest.parseColor("hsla(90, 87.5%, 37.5%, 0)") is "rgba(95, 179, 11, 0)" PASS colorTest.parseColor("hsla(120, 87.5%, 37.5%, 0)") is "rgba(11, 179, 11, 0)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 37.5%, 0)") should be rgba(11, 179, 95, 0). Was rgba(11, 179, 96, 0). +PASS colorTest.parseColor("hsla(150, 87.5%, 37.5%, 0)") is "rgba(11, 179, 95, 0)" PASS colorTest.parseColor("hsla(180, 87.5%, 37.5%, 0)") is "rgba(11, 179, 179, 0)" PASS colorTest.parseColor("hsla(210, 87.5%, 37.5%, 0)") is "rgba(11, 95, 179, 0)" PASS colorTest.parseColor("hsla(240, 87.5%, 37.5%, 0)") is "rgba(11, 11, 179, 0)" PASS colorTest.parseColor("hsla(270, 87.5%, 37.5%, 0)") is "rgba(95, 11, 179, 0)" PASS colorTest.parseColor("hsla(300, 87.5%, 37.5%, 0)") is "rgba(179, 11, 179, 0)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 37.5%, 0)") should be rgba(179, 11, 95, 0). Was rgba(179, 11, 96, 0). +PASS colorTest.parseColor("hsla(330, 87.5%, 37.5%, 0)") is "rgba(179, 11, 95, 0)" PASS colorTest.parseColor("hsla(0, 100%, 37.5%, 0)") is "rgba(191, 0, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 37.5%, 0)") is "rgba(191, 95, 0, 0)" PASS colorTest.parseColor("hsla(60, 100%, 37.5%, 0)") is "rgba(191, 191, 0, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 37.5%, 0)") should be rgba(95, 191, 0, 0). Was rgba(96, 191, 0, 0). +PASS colorTest.parseColor("hsla(90, 100%, 37.5%, 0)") is "rgba(95, 191, 0, 0)" PASS colorTest.parseColor("hsla(120, 100%, 37.5%, 0)") is "rgba(0, 191, 0, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 37.5%, 0)") should be rgba(0, 191, 95, 0). Was rgba(0, 191, 96, 0). +PASS colorTest.parseColor("hsla(150, 100%, 37.5%, 0)") is "rgba(0, 191, 95, 0)" PASS colorTest.parseColor("hsla(180, 100%, 37.5%, 0)") is "rgba(0, 191, 191, 0)" PASS colorTest.parseColor("hsla(210, 100%, 37.5%, 0)") is "rgba(0, 95, 191, 0)" PASS colorTest.parseColor("hsla(240, 100%, 37.5%, 0)") is "rgba(0, 0, 191, 0)" PASS colorTest.parseColor("hsla(270, 100%, 37.5%, 0)") is "rgba(95, 0, 191, 0)" PASS colorTest.parseColor("hsla(300, 100%, 37.5%, 0)") is "rgba(191, 0, 191, 0)" -FAIL colorTest.parseColor("hsla(330, 100%, 37.5%, 0)") should be rgba(191, 0, 95, 0). Was rgba(191, 0, 96, 0). +PASS colorTest.parseColor("hsla(330, 100%, 37.5%, 0)") is "rgba(191, 0, 95, 0)" PASS colorTest.parseColor("hsla(0, 0%, 50%, 0)") is "rgba(127, 127, 127, 0)" PASS colorTest.parseColor("hsla(30, 0%, 50%, 0)") is "rgba(127, 127, 127, 0)" PASS colorTest.parseColor("hsla(60, 0%, 50%, 0)") is "rgba(127, 127, 127, 0)" @@ -967,75 +967,75 @@ PASS colorTest.parseColor("hsla(0, 37.5%, 50%, 0)") is "rgba(175, 79, 79, 0)" PASS colorTest.parseColor("hsla(30, 37.5%, 50%, 0)") is "rgba(175, 127, 79, 0)" PASS colorTest.parseColor("hsla(60, 37.5%, 50%, 0)") is "rgba(175, 175, 79, 0)" -FAIL colorTest.parseColor("hsla(90, 37.5%, 50%, 0)") should be rgba(127, 175, 79, 0). Was rgba(128, 175, 79, 0). +PASS colorTest.parseColor("hsla(90, 37.5%, 50%, 0)") is "rgba(127, 175, 79, 0)" PASS colorTest.parseColor("hsla(120, 37.5%, 50%, 0)") is "rgba(79, 175, 79, 0)" -FAIL colorTest.parseColor("hsla(150, 37.5%, 50%, 0)") should be rgba(79, 175, 127, 0). Was rgba(79, 175, 128, 0). +PASS colorTest.parseColor("hsla(150, 37.5%, 50%, 0)") is "rgba(79, 175, 127, 0)" PASS colorTest.parseColor("hsla(180, 37.5%, 50%, 0)") is "rgba(79, 175, 175, 0)" PASS colorTest.parseColor("hsla(210, 37.5%, 50%, 0)") is "rgba(79, 127, 175, 0)" PASS colorTest.parseColor("hsla(240, 37.5%, 50%, 0)") is "rgba(79, 79, 175, 0)" PASS colorTest.parseColor("hsla(270, 37.5%, 50%, 0)") is "rgba(127, 79, 175, 0)" PASS colorTest.parseColor("hsla(300, 37.5%, 50%, 0)") is "rgba(175, 79, 175, 0)" -FAIL colorTest.parseColor("hsla(330, 37.5%, 50%, 0)") should be rgba(175, 79, 127, 0). Was rgba(175, 79, 128, 0). +PASS colorTest.parseColor("hsla(330, 37.5%, 50%, 0)") is "rgba(175, 79, 127, 0)" PASS colorTest.parseColor("hsla(0, 50%, 50%, 0)") is "rgba(191, 63, 63, 0)" PASS colorTest.parseColor("hsla(30, 50%, 50%, 0)") is "rgba(191, 127, 63, 0)" PASS colorTest.parseColor("hsla(60, 50%, 50%, 0)") is "rgba(191, 191, 63, 0)" -FAIL colorTest.parseColor("hsla(90, 50%, 50%, 0)") should be rgba(127, 191, 63, 0). Was rgba(128, 191, 63, 0). +PASS colorTest.parseColor("hsla(90, 50%, 50%, 0)") is "rgba(127, 191, 63, 0)" PASS colorTest.parseColor("hsla(120, 50%, 50%, 0)") is "rgba(63, 191, 63, 0)" -FAIL colorTest.parseColor("hsla(150, 50%, 50%, 0)") should be rgba(63, 191, 127, 0). Was rgba(63, 191, 128, 0). +PASS colorTest.parseColor("hsla(150, 50%, 50%, 0)") is "rgba(63, 191, 127, 0)" PASS colorTest.parseColor("hsla(180, 50%, 50%, 0)") is "rgba(63, 191, 191, 0)" PASS colorTest.parseColor("hsla(210, 50%, 50%, 0)") is "rgba(63, 127, 191, 0)" PASS colorTest.parseColor("hsla(240, 50%, 50%, 0)") is "rgba(63, 63, 191, 0)" PASS colorTest.parseColor("hsla(270, 50%, 50%, 0)") is "rgba(127, 63, 191, 0)" PASS colorTest.parseColor("hsla(300, 50%, 50%, 0)") is "rgba(191, 63, 191, 0)" -FAIL colorTest.parseColor("hsla(330, 50%, 50%, 0)") should be rgba(191, 63, 127, 0). Was rgba(191, 63, 128, 0). +PASS colorTest.parseColor("hsla(330, 50%, 50%, 0)") is "rgba(191, 63, 127, 0)" PASS colorTest.parseColor("hsla(0, 62.5%, 50%, 0)") is "rgba(207, 47, 47, 0)" PASS colorTest.parseColor("hsla(30, 62.5%, 50%, 0)") is "rgba(207, 127, 47, 0)" PASS colorTest.parseColor("hsla(60, 62.5%, 50%, 0)") is "rgba(207, 207, 47, 0)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 50%, 0)") should be rgba(127, 207, 47, 0). Was rgba(128, 207, 47, 0). +PASS colorTest.parseColor("hsla(90, 62.5%, 50%, 0)") is "rgba(127, 207, 47, 0)" PASS colorTest.parseColor("hsla(120, 62.5%, 50%, 0)") is "rgba(47, 207, 47, 0)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 50%, 0)") should be rgba(47, 207, 127, 0). Was rgba(47, 207, 128, 0). +PASS colorTest.parseColor("hsla(150, 62.5%, 50%, 0)") is "rgba(47, 207, 127, 0)" PASS colorTest.parseColor("hsla(180, 62.5%, 50%, 0)") is "rgba(47, 207, 207, 0)" PASS colorTest.parseColor("hsla(210, 62.5%, 50%, 0)") is "rgba(47, 127, 207, 0)" PASS colorTest.parseColor("hsla(240, 62.5%, 50%, 0)") is "rgba(47, 47, 207, 0)" PASS colorTest.parseColor("hsla(270, 62.5%, 50%, 0)") is "rgba(127, 47, 207, 0)" PASS colorTest.parseColor("hsla(300, 62.5%, 50%, 0)") is "rgba(207, 47, 207, 0)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 50%, 0)") should be rgba(207, 47, 127, 0). Was rgba(207, 47, 128, 0). +PASS colorTest.parseColor("hsla(330, 62.5%, 50%, 0)") is "rgba(207, 47, 127, 0)" PASS colorTest.parseColor("hsla(0, 75%, 50%, 0)") is "rgba(223, 31, 31, 0)" PASS colorTest.parseColor("hsla(30, 75%, 50%, 0)") is "rgba(223, 127, 31, 0)" PASS colorTest.parseColor("hsla(60, 75%, 50%, 0)") is "rgba(223, 223, 31, 0)" -FAIL colorTest.parseColor("hsla(90, 75%, 50%, 0)") should be rgba(127, 223, 31, 0). Was rgba(128, 223, 31, 0). +PASS colorTest.parseColor("hsla(90, 75%, 50%, 0)") is "rgba(127, 223, 31, 0)" PASS colorTest.parseColor("hsla(120, 75%, 50%, 0)") is "rgba(31, 223, 31, 0)" -FAIL colorTest.parseColor("hsla(150, 75%, 50%, 0)") should be rgba(31, 223, 127, 0). Was rgba(31, 223, 128, 0). +PASS colorTest.parseColor("hsla(150, 75%, 50%, 0)") is "rgba(31, 223, 127, 0)" PASS colorTest.parseColor("hsla(180, 75%, 50%, 0)") is "rgba(31, 223, 223, 0)" PASS colorTest.parseColor("hsla(210, 75%, 50%, 0)") is "rgba(31, 127, 223, 0)" PASS colorTest.parseColor("hsla(240, 75%, 50%, 0)") is "rgba(31, 31, 223, 0)" PASS colorTest.parseColor("hsla(270, 75%, 50%, 0)") is "rgba(127, 31, 223, 0)" PASS colorTest.parseColor("hsla(300, 75%, 50%, 0)") is "rgba(223, 31, 223, 0)" -FAIL colorTest.parseColor("hsla(330, 75%, 50%, 0)") should be rgba(223, 31, 127, 0). Was rgba(223, 31, 128, 0). +PASS colorTest.parseColor("hsla(330, 75%, 50%, 0)") is "rgba(223, 31, 127, 0)" PASS colorTest.parseColor("hsla(0, 87.5%, 50%, 0)") is "rgba(239, 15, 15, 0)" PASS colorTest.parseColor("hsla(30, 87.5%, 50%, 0)") is "rgba(239, 127, 15, 0)" PASS colorTest.parseColor("hsla(60, 87.5%, 50%, 0)") is "rgba(239, 239, 15, 0)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 50%, 0)") should be rgba(127, 239, 15, 0). Was rgba(128, 239, 15, 0). +PASS colorTest.parseColor("hsla(90, 87.5%, 50%, 0)") is "rgba(127, 239, 15, 0)" PASS colorTest.parseColor("hsla(120, 87.5%, 50%, 0)") is "rgba(15, 239, 15, 0)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 50%, 0)") should be rgba(15, 239, 127, 0). Was rgba(15, 239, 128, 0). +PASS colorTest.parseColor("hsla(150, 87.5%, 50%, 0)") is "rgba(15, 239, 127, 0)" PASS colorTest.parseColor("hsla(180, 87.5%, 50%, 0)") is "rgba(15, 239, 239, 0)" PASS colorTest.parseColor("hsla(210, 87.5%, 50%, 0)") is "rgba(15, 127, 239, 0)" PASS colorTest.parseColor("hsla(240, 87.5%, 50%, 0)") is "rgba(15, 15, 239, 0)" PASS colorTest.parseColor("hsla(270, 87.5%, 50%, 0)") is "rgba(127, 15, 239, 0)" PASS colorTest.parseColor("hsla(300, 87.5%, 50%, 0)") is "rgba(239, 15, 239, 0)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 50%, 0)") should be rgba(239, 15, 127, 0). Was rgba(239, 15, 128, 0). +PASS colorTest.parseColor("hsla(330, 87.5%, 50%, 0)") is "rgba(239, 15, 127, 0)" PASS colorTest.parseColor("hsla(0, 100%, 50%, 0)") is "rgba(255, 0, 0, 0)" PASS colorTest.parseColor("hsla(30, 100%, 50%, 0)") is "rgba(255, 127, 0, 0)" PASS colorTest.parseColor("hsla(60, 100%, 50%, 0)") is "rgba(255, 255, 0, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 50%, 0)") should be rgba(127, 255, 0, 0). Was rgba(128, 255, 0, 0). +PASS colorTest.parseColor("hsla(90, 100%, 50%, 0)") is "rgba(127, 255, 0, 0)" PASS colorTest.parseColor("hsla(120, 100%, 50%, 0)") is "rgba(0, 255, 0, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 50%, 0)") should be rgba(0, 255, 127, 0). Was rgba(0, 255, 128, 0). +PASS colorTest.parseColor("hsla(150, 100%, 50%, 0)") is "rgba(0, 255, 127, 0)" PASS colorTest.parseColor("hsla(180, 100%, 50%, 0)") is "rgba(0, 255, 255, 0)" PASS colorTest.parseColor("hsla(210, 100%, 50%, 0)") is "rgba(0, 127, 255, 0)" PASS colorTest.parseColor("hsla(240, 100%, 50%, 0)") is "rgba(0, 0, 255, 0)" PASS colorTest.parseColor("hsla(270, 100%, 50%, 0)") is "rgba(127, 0, 255, 0)" PASS colorTest.parseColor("hsla(300, 100%, 50%, 0)") is "rgba(255, 0, 255, 0)" -FAIL colorTest.parseColor("hsla(330, 100%, 50%, 0)") should be rgba(255, 0, 127, 0). Was rgba(255, 0, 128, 0). +PASS colorTest.parseColor("hsla(330, 100%, 50%, 0)") is "rgba(255, 0, 127, 0)" PASS colorTest.parseColor("hsla(0, 0%, 62.5%, 0)") is "rgba(159, 159, 159, 0)" PASS colorTest.parseColor("hsla(30, 0%, 62.5%, 0)") is "rgba(159, 159, 159, 0)" PASS colorTest.parseColor("hsla(60, 0%, 62.5%, 0)") is "rgba(159, 159, 159, 0)" @@ -1087,63 +1087,63 @@ PASS colorTest.parseColor("hsla(0, 50%, 62.5%, 0)") is "rgba(207, 111, 111, 0)" PASS colorTest.parseColor("hsla(30, 50%, 62.5%, 0)") is "rgba(207, 159, 111, 0)" PASS colorTest.parseColor("hsla(60, 50%, 62.5%, 0)") is "rgba(207, 207, 111, 0)" -FAIL colorTest.parseColor("hsla(90, 50%, 62.5%, 0)") should be rgba(159, 207, 111, 0). Was rgba(160, 207, 111, 0). +PASS colorTest.parseColor("hsla(90, 50%, 62.5%, 0)") is "rgba(159, 207, 111, 0)" PASS colorTest.parseColor("hsla(120, 50%, 62.5%, 0)") is "rgba(111, 207, 111, 0)" -FAIL colorTest.parseColor("hsla(150, 50%, 62.5%, 0)") should be rgba(111, 207, 159, 0). Was rgba(111, 207, 160, 0). +PASS colorTest.parseColor("hsla(150, 50%, 62.5%, 0)") is "rgba(111, 207, 159, 0)" PASS colorTest.parseColor("hsla(180, 50%, 62.5%, 0)") is "rgba(111, 207, 207, 0)" PASS colorTest.parseColor("hsla(210, 50%, 62.5%, 0)") is "rgba(111, 159, 207, 0)" PASS colorTest.parseColor("hsla(240, 50%, 62.5%, 0)") is "rgba(111, 111, 207, 0)" PASS colorTest.parseColor("hsla(270, 50%, 62.5%, 0)") is "rgba(159, 111, 207, 0)" PASS colorTest.parseColor("hsla(300, 50%, 62.5%, 0)") is "rgba(207, 111, 207, 0)" -FAIL colorTest.parseColor("hsla(330, 50%, 62.5%, 0)") should be rgba(207, 111, 159, 0). Was rgba(207, 111, 160, 0). +PASS colorTest.parseColor("hsla(330, 50%, 62.5%, 0)") is "rgba(207, 111, 159, 0)" PASS colorTest.parseColor("hsla(0, 62.5%, 62.5%, 0)") is "rgba(219, 99, 99, 0)" PASS colorTest.parseColor("hsla(30, 62.5%, 62.5%, 0)") is "rgba(219, 159, 99, 0)" PASS colorTest.parseColor("hsla(60, 62.5%, 62.5%, 0)") is "rgba(219, 219, 99, 0)" -FAIL colorTest.parseColor("hsla(90, 62.5%, 62.5%, 0)") should be rgba(159, 219, 99, 0). Was rgba(160, 219, 99, 0). +PASS colorTest.parseColor("hsla(90, 62.5%, 62.5%, 0)") is "rgba(159, 219, 99, 0)" PASS colorTest.parseColor("hsla(120, 62.5%, 62.5%, 0)") is "rgba(99, 219, 99, 0)" -FAIL colorTest.parseColor("hsla(150, 62.5%, 62.5%, 0)") should be rgba(99, 219, 159, 0). Was rgba(99, 219, 160, 0). +PASS colorTest.parseColor("hsla(150, 62.5%, 62.5%, 0)") is "rgba(99, 219, 159, 0)" PASS colorTest.parseColor("hsla(180, 62.5%, 62.5%, 0)") is "rgba(99, 219, 219, 0)" PASS colorTest.parseColor("hsla(210, 62.5%, 62.5%, 0)") is "rgba(99, 159, 219, 0)" PASS colorTest.parseColor("hsla(240, 62.5%, 62.5%, 0)") is "rgba(99, 99, 219, 0)" PASS colorTest.parseColor("hsla(270, 62.5%, 62.5%, 0)") is "rgba(159, 99, 219, 0)" PASS colorTest.parseColor("hsla(300, 62.5%, 62.5%, 0)") is "rgba(219, 99, 219, 0)" -FAIL colorTest.parseColor("hsla(330, 62.5%, 62.5%, 0)") should be rgba(219, 99, 159, 0). Was rgba(219, 99, 160, 0). +PASS colorTest.parseColor("hsla(330, 62.5%, 62.5%, 0)") is "rgba(219, 99, 159, 0)" PASS colorTest.parseColor("hsla(0, 75%, 62.5%, 0)") is "rgba(231, 87, 87, 0)" PASS colorTest.parseColor("hsla(30, 75%, 62.5%, 0)") is "rgba(231, 159, 87, 0)" PASS colorTest.parseColor("hsla(60, 75%, 62.5%, 0)") is "rgba(231, 231, 87, 0)" -FAIL colorTest.parseColor("hsla(90, 75%, 62.5%, 0)") should be rgba(159, 231, 87, 0). Was rgba(160, 231, 87, 0). +PASS colorTest.parseColor("hsla(90, 75%, 62.5%, 0)") is "rgba(159, 231, 87, 0)" PASS colorTest.parseColor("hsla(120, 75%, 62.5%, 0)") is "rgba(87, 231, 87, 0)" -FAIL colorTest.parseColor("hsla(150, 75%, 62.5%, 0)") should be rgba(87, 231, 159, 0). Was rgba(87, 231, 160, 0). +PASS colorTest.parseColor("hsla(150, 75%, 62.5%, 0)") is "rgba(87, 231, 159, 0)" PASS colorTest.parseColor("hsla(180, 75%, 62.5%, 0)") is "rgba(87, 231, 231, 0)" PASS colorTest.parseColor("hsla(210, 75%, 62.5%, 0)") is "rgba(87, 159, 231, 0)" PASS colorTest.parseColor("hsla(240, 75%, 62.5%, 0)") is "rgba(87, 87, 231, 0)" PASS colorTest.parseColor("hsla(270, 75%, 62.5%, 0)") is "rgba(159, 87, 231, 0)" PASS colorTest.parseColor("hsla(300, 75%, 62.5%, 0)") is "rgba(231, 87, 231, 0)" -FAIL colorTest.parseColor("hsla(330, 75%, 62.5%, 0)") should be rgba(231, 87, 159, 0). Was rgba(231, 87, 160, 0). +PASS colorTest.parseColor("hsla(330, 75%, 62.5%, 0)") is "rgba(231, 87, 159, 0)" PASS colorTest.parseColor("hsla(0, 87.5%, 62.5%, 0)") is "rgba(243, 75, 75, 0)" PASS colorTest.parseColor("hsla(30, 87.5%, 62.5%, 0)") is "rgba(243, 159, 75, 0)" PASS colorTest.parseColor("hsla(60, 87.5%, 62.5%, 0)") is "rgba(243, 243, 75, 0)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 62.5%, 0)") should be rgba(159, 243, 75, 0). Was rgba(160, 243, 75, 0). +PASS colorTest.parseColor("hsla(90, 87.5%, 62.5%, 0)") is "rgba(159, 243, 75, 0)" PASS colorTest.parseColor("hsla(120, 87.5%, 62.5%, 0)") is "rgba(75, 243, 75, 0)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 62.5%, 0)") should be rgba(75, 243, 159, 0). Was rgba(75, 243, 160, 0). +PASS colorTest.parseColor("hsla(150, 87.5%, 62.5%, 0)") is "rgba(75, 243, 159, 0)" PASS colorTest.parseColor("hsla(180, 87.5%, 62.5%, 0)") is "rgba(75, 243, 243, 0)" PASS colorTest.parseColor("hsla(210, 87.5%, 62.5%, 0)") is "rgba(75, 159, 243, 0)" PASS colorTest.parseColor("hsla(240, 87.5%, 62.5%, 0)") is "rgba(75, 75, 243, 0)" PASS colorTest.parseColor("hsla(270, 87.5%, 62.5%, 0)") is "rgba(159, 75, 243, 0)" PASS colorTest.parseColor("hsla(300, 87.5%, 62.5%, 0)") is "rgba(243, 75, 243, 0)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 62.5%, 0)") should be rgba(243, 75, 159, 0). Was rgba(243, 75, 160, 0). +PASS colorTest.parseColor("hsla(330, 87.5%, 62.5%, 0)") is "rgba(243, 75, 159, 0)" PASS colorTest.parseColor("hsla(0, 100%, 62.5%, 0)") is "rgba(255, 63, 63, 0)" PASS colorTest.parseColor("hsla(30, 100%, 62.5%, 0)") is "rgba(255, 159, 63, 0)" PASS colorTest.parseColor("hsla(60, 100%, 62.5%, 0)") is "rgba(255, 255, 63, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 62.5%, 0)") should be rgba(159, 255, 63, 0). Was rgba(160, 255, 63, 0). +PASS colorTest.parseColor("hsla(90, 100%, 62.5%, 0)") is "rgba(159, 255, 63, 0)" PASS colorTest.parseColor("hsla(120, 100%, 62.5%, 0)") is "rgba(63, 255, 63, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 62.5%, 0)") should be rgba(63, 255, 159, 0). Was rgba(63, 255, 160, 0). +PASS colorTest.parseColor("hsla(150, 100%, 62.5%, 0)") is "rgba(63, 255, 159, 0)" PASS colorTest.parseColor("hsla(180, 100%, 62.5%, 0)") is "rgba(63, 255, 255, 0)" PASS colorTest.parseColor("hsla(210, 100%, 62.5%, 0)") is "rgba(63, 159, 255, 0)" PASS colorTest.parseColor("hsla(240, 100%, 62.5%, 0)") is "rgba(63, 63, 255, 0)" PASS colorTest.parseColor("hsla(270, 100%, 62.5%, 0)") is "rgba(159, 63, 255, 0)" PASS colorTest.parseColor("hsla(300, 100%, 62.5%, 0)") is "rgba(255, 63, 255, 0)" -FAIL colorTest.parseColor("hsla(330, 100%, 62.5%, 0)") should be rgba(255, 63, 159, 0). Was rgba(255, 63, 160, 0). +PASS colorTest.parseColor("hsla(330, 100%, 62.5%, 0)") is "rgba(255, 63, 159, 0)" PASS colorTest.parseColor("hsla(0, 0%, 75%, 0)") is "rgba(191, 191, 191, 0)" PASS colorTest.parseColor("hsla(30, 0%, 75%, 0)") is "rgba(191, 191, 191, 0)" PASS colorTest.parseColor("hsla(60, 0%, 75%, 0)") is "rgba(191, 191, 191, 0)" @@ -1219,39 +1219,39 @@ PASS colorTest.parseColor("hsla(0, 75%, 75%, 0)") is "rgba(239, 143, 143, 0)" PASS colorTest.parseColor("hsla(30, 75%, 75%, 0)") is "rgba(239, 191, 143, 0)" PASS colorTest.parseColor("hsla(60, 75%, 75%, 0)") is "rgba(239, 239, 143, 0)" -FAIL colorTest.parseColor("hsla(90, 75%, 75%, 0)") should be rgba(191, 239, 143, 0). Was rgba(192, 239, 143, 0). +PASS colorTest.parseColor("hsla(90, 75%, 75%, 0)") is "rgba(191, 239, 143, 0)" PASS colorTest.parseColor("hsla(120, 75%, 75%, 0)") is "rgba(143, 239, 143, 0)" -FAIL colorTest.parseColor("hsla(150, 75%, 75%, 0)") should be rgba(143, 239, 191, 0). Was rgba(143, 239, 192, 0). +PASS colorTest.parseColor("hsla(150, 75%, 75%, 0)") is "rgba(143, 239, 191, 0)" PASS colorTest.parseColor("hsla(180, 75%, 75%, 0)") is "rgba(143, 239, 239, 0)" PASS colorTest.parseColor("hsla(210, 75%, 75%, 0)") is "rgba(143, 191, 239, 0)" PASS colorTest.parseColor("hsla(240, 75%, 75%, 0)") is "rgba(143, 143, 239, 0)" PASS colorTest.parseColor("hsla(270, 75%, 75%, 0)") is "rgba(191, 143, 239, 0)" PASS colorTest.parseColor("hsla(300, 75%, 75%, 0)") is "rgba(239, 143, 239, 0)" -FAIL colorTest.parseColor("hsla(330, 75%, 75%, 0)") should be rgba(239, 143, 191, 0). Was rgba(239, 143, 192, 0). +PASS colorTest.parseColor("hsla(330, 75%, 75%, 0)") is "rgba(239, 143, 191, 0)" PASS colorTest.parseColor("hsla(0, 87.5%, 75%, 0)") is "rgba(247, 135, 135, 0)" PASS colorTest.parseColor("hsla(30, 87.5%, 75%, 0)") is "rgba(247, 191, 135, 0)" PASS colorTest.parseColor("hsla(60, 87.5%, 75%, 0)") is "rgba(247, 247, 135, 0)" -FAIL colorTest.parseColor("hsla(90, 87.5%, 75%, 0)") should be rgba(191, 247, 135, 0). Was rgba(192, 247, 135, 0). +PASS colorTest.parseColor("hsla(90, 87.5%, 75%, 0)") is "rgba(191, 247, 135, 0)" PASS colorTest.parseColor("hsla(120, 87.5%, 75%, 0)") is "rgba(135, 247, 135, 0)" -FAIL colorTest.parseColor("hsla(150, 87.5%, 75%, 0)") should be rgba(135, 247, 191, 0). Was rgba(135, 247, 192, 0). +PASS colorTest.parseColor("hsla(150, 87.5%, 75%, 0)") is "rgba(135, 247, 191, 0)" PASS colorTest.parseColor("hsla(180, 87.5%, 75%, 0)") is "rgba(135, 247, 247, 0)" PASS colorTest.parseColor("hsla(210, 87.5%, 75%, 0)") is "rgba(135, 191, 247, 0)" PASS colorTest.parseColor("hsla(240, 87.5%, 75%, 0)") is "rgba(135, 135, 247, 0)" PASS colorTest.parseColor("hsla(270, 87.5%, 75%, 0)") is "rgba(191, 135, 247, 0)" PASS colorTest.parseColor("hsla(300, 87.5%, 75%, 0)") is "rgba(247, 135, 247, 0)" -FAIL colorTest.parseColor("hsla(330, 87.5%, 75%, 0)") should be rgba(247, 135, 191, 0). Was rgba(247, 135, 192, 0). +PASS colorTest.parseColor("hsla(330, 87.5%, 75%, 0)") is "rgba(247, 135, 191, 0)" PASS colorTest.parseColor("hsla(0, 100%, 75%, 0)") is "rgba(255, 127, 127, 0)" PASS colorTest.parseColor("hsla(30, 100%, 75%, 0)") is "rgba(255, 191, 127, 0)" PASS colorTest.parseColor("hsla(60, 100%, 75%, 0)") is "rgba(255, 255, 127, 0)" -FAIL colorTest.parseColor("hsla(90, 100%, 75%, 0)") should be rgba(191, 255, 127, 0). Was rgba(192, 255, 127, 0). +PASS colorTest.parseColor("hsla(90, 100%, 75%, 0)") is "rgba(191, 255, 127, 0)" PASS colorTest.parseColor("hsla(120, 100%, 75%, 0)") is "rgba(127, 255, 127, 0)" -FAIL colorTest.parseColor("hsla(150, 100%, 75%, 0)") should be rgba(127, 255, 191, 0). Was rgba(127, 255, 192, 0). +PASS colorTest.parseColor("hsla(150, 100%, 75%, 0)") is "rgba(127, 255, 191, 0)" PASS colorTest.parseColor("hsla(180, 100%, 75%, 0)") is "rgba(127, 255, 255, 0)" PASS colorTest.parseColor("hsla(210, 100%, 75%, 0)") is "rgba(127, 191, 255, 0)" PASS colorTest.parseColor("hsla(240, 100%, 75%, 0)") is "rgba(127, 127, 255, 0)" PASS colorTest.parseColor("hsla(270, 100%, 75%, 0)") is "rgba(191, 127, 255, 0)" PASS colorTest.parseColor("hsla(300, 100%, 75%, 0)") is "rgba(255, 127, 255, 0)" -FAIL colorTest.parseColor("hsla(330, 100%, 75%, 0)") should be rgba(255, 127, 191, 0). Was rgba(255, 127, 192, 0). +PASS colorTest.parseColor("hsla(330, 100%, 75%, 0)") is "rgba(255, 127, 191, 0)" PASS colorTest.parseColor("hsla(0, 0%, 87.5%, 0)") is "rgba(223, 223, 223, 0)" PASS colorTest.parseColor("hsla(30, 0%, 87.5%, 0)") is "rgba(223, 223, 223, 0)" PASS colorTest.parseColor("hsla(60, 0%, 87.5%, 0)") is "rgba(223, 223, 223, 0)"
diff --git a/third_party/WebKit/LayoutTests/external/OWNERS b/third_party/WebKit/LayoutTests/external/OWNERS index 8b5054b8..d4138ee2 100644 --- a/third_party/WebKit/LayoutTests/external/OWNERS +++ b/third_party/WebKit/LayoutTests/external/OWNERS
@@ -1,3 +1,5 @@ +# Please do not remove this file. It is needed by webkitpy/w3c/directory_owners_extractor.py + # TEAM: ecosystem-infra@chromium.org # COMPONENT: Blink>Infra>Ecosystem foolip@chromium.org
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt deleted file mode 100644 index 68b754c..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt deleted file mode 100644 index 4b11fad5..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt deleted file mode 100644 index a7c60cf..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt deleted file mode 100644 index ccf7c36e..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt deleted file mode 100644 index 374baf48..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt deleted file mode 100644 index 36d6d2a2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt deleted file mode 100644 index cbb516d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-7 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt deleted file mode 100644 index a2e74ab..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-8 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt deleted file mode 100644 index 91fd1d5..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsl-9 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt deleted file mode 100644 index 7bece1a..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt deleted file mode 100644 index 0be3a76e..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt deleted file mode 100644 index c93d5ae..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt deleted file mode 100644 index 9132e42..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt deleted file mode 100644 index af32012..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt deleted file mode 100644 index 4d01775..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt deleted file mode 100644 index bebdc7c..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-7 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt deleted file mode 100644 index 28a999b..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-8 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt deleted file mode 100644 index 048b659..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Canvas test: 2d.fillStyle.parse.css-color-4-hsla-9 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt deleted file mode 100644 index 70b5704..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt deleted file mode 100644 index fbeb3bc..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt deleted file mode 100644 index d4a4289..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt deleted file mode 100644 index be4f9bc..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt deleted file mode 100644 index 0d29c63..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt deleted file mode 100644 index 86f82f9..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt deleted file mode 100644 index 7a509847..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-7 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt deleted file mode 100644 index c897025c..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-8 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt deleted file mode 100644 index 3368b5d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-9 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt deleted file mode 100644 index 161283f..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt deleted file mode 100644 index cffa8364..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt deleted file mode 100644 index 27c718d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt deleted file mode 100644 index eabf2c18..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt deleted file mode 100644 index 6c7f267..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt deleted file mode 100644 index f739038..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt deleted file mode 100644 index 5338052..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-7 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt deleted file mode 100644 index aa1556a..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-8 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt deleted file mode 100644 index 5860c42..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-9 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255 -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https-expected.txt index 45adc35..2241d7e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https-expected.txt
@@ -6,9 +6,11 @@ FAIL getStats() with track added via addTransceiver should succeed assert_idl_attribute: Expect pc to have addTransceiver() method property "addTransceiver" not found in prototype chain FAIL getStats() with track associated with more than one sender should reject with InvalidAccessError promise_test: Unhandled rejection with value: object "TypeError: pc.addTransceiver is not a function" FAIL getStats() with track associated with both sender and receiver should reject with InvalidAccessError pc.addTransceiver is not a function -FAIL getStats() with no argument should return stats report containing peer-connection stats assert_equals: Expect dictionary.timeStamp to be number expected "number" but got "undefined" +PASS getStats() with no argument should return stats report containing peer-connection stats on an empty PC +FAIL getStats() with no argument should return stats report containing peer-connection stats and outbound-track-stats assert_true: Expect statsReport to contain stats object of type outbound-rtp expected true got false +FAIL getStats() with no argument should return stats for no-stream tracks assert_true: Expect statsReport to contain stats object of type outbound-rtp expected true got false FAIL getStats() on track associated with RtpSender should return stats report containing outbound-rtp stats promise_test: Unhandled rejection with value: object "TypeError: Failed to execute 'getStats' on 'RTCPeerConnection': The callback provided as parameter 1 is not a function." FAIL getStats() on track associated with RtpReceiver should return stats report containing inbound-rtp stats pc.addTransceiver is not a function -FAIL getStats() with connected peer connections having tracks and data channel should return all mandatory to implement stats assert_unreached: test failed with error: Error: assert_equals: Expect dictionary.timeStamp to be number expected "number" but got "undefined" Reached unreachable code +FAIL getStats() with connected peer connections having tracks and data channel should return all mandatory to implement stats assert_unreached: test failed with error: Error: assert_equals: Expect dictionary.issuerCertificateId to be string expected "string" but got "undefined" Reached unreachable code Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html index decac1b..73138507 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html
@@ -122,7 +122,35 @@ validateStatsReport(statsReport); assert_stats_report_has_stats(statsReport, ['peer-connection']); }); - }, 'getStats() with no argument should return stats report containing peer-connection stats'); + }, 'getStats() with no argument should return stats report containing peer-connection stats on an empty PC'); + + promise_test(t => { + const pc = new RTCPeerConnection(); + return getTrackFromUserMedia('audio') + .then(([track, mediaStream]) => { + pc.addTrack(track, mediaStream); + return pc.getStats(); + }) + .then(statsReport => { + validateStatsReport(statsReport); + assert_stats_report_has_stats(statsReport, ['peer-connection']); + assert_stats_report_has_stats(statsReport, ['outbound-rtp']); + }); + }, 'getStats() with no argument should return stats report containing peer-connection stats and outbound-track-stats'); + + promise_test(t => { + const pc = new RTCPeerConnection(); + return getTrackFromUserMedia('audio') + .then(([track, mediaStream]) => { + pc.addTrack(track); + return pc.getStats(); + }) + .then(statsReport => { + validateStatsReport(statsReport); + assert_stats_report_has_stats(statsReport, ['peer-connection']); + assert_stats_report_has_stats(statsReport, ['outbound-rtp']); + }); + }, 'getStats() with no argument should return stats for no-stream tracks'); /* 8.5. The stats selection algorithm
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCStats-helper.js b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCStats-helper.js index 2888246..c2be1b3 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCStats-helper.js +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCStats-helper.js
@@ -136,7 +136,7 @@ }; */ function validateRtcStats(statsReport, stats) { - assert_number_field(stats, 'timeStamp'); + assert_number_field(stats, 'timestamp'); assert_string_field(stats, 'type'); assert_string_field(stats, 'id'); }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png index 7ecee01..ce87ffd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt index 318da6c..00ddd69 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 62.84x17.69 + LayoutSVGContainer {g} at (10,0.80) size 12.83x11.60 LayoutSVGPath {svg:line} at (10,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.80] [x2=10.00] [y2=12.40] LayoutSVGPath {svg:line} at (22.83,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=22.83] [y1=0.80] [x2=22.83] [y2=12.40] LayoutSVGRect {svg:rect} at (10,0.80) size 12.83x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.80] [width=12.83] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 125.67x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 125.67x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 41 width 125.68: "Expected 'Text' to be selected, got: 'Te'" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 72.09: "Text to Squeeze" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 2 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png index f69763b..12721b3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt index eab0be2..67dae4f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 56.20x17.69 + LayoutSVGContainer {g} at (24.77,0.80) size 5.83x11.60 LayoutSVGPath {svg:line} at (24.77,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=24.77] [y1=0.80] [x2=24.77] [y2=12.40] LayoutSVGPath {svg:line} at (30.59,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=30.59] [y1=0.80] [x2=30.59] [y2=12.40] LayoutSVGRect {svg:rect} at (24.77,0.80) size 5.83x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=24.77] [y=0.80] [width=5.83] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 112.39x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 112.39x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 112.40: "Expected 'to' to be selected, got: 't'" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 72.09: "Text to Squeeze" -selection start: position 3 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png index 8d59ab7..16be009 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt index 929f282..54e34b58 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 61x17.69 + LayoutSVGContainer {g} at (32.53,0.80) size 12.35x11.60 LayoutSVGPath {svg:line} at (32.53,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=32.53] [y1=0.80] [x2=32.53] [y2=12.40] LayoutSVGPath {svg:line} at (44.88,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=44.88] [y1=0.80] [x2=44.88] [y2=12.40] LayoutSVGRect {svg:rect} at (32.53,0.80) size 12.35x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=32.53] [y=0.80] [width=12.35] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 122x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 122x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 122.00: "Expected 'Squ' to be selected, got: 'o '" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 72.09: "Text to Squeeze" -selection start: position 6 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png index 9fa6aa1..a8e7366 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt index d47355f..b025c0a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 96.04x17.69 + LayoutSVGContainer {g} at (10,0.80) size 50x11.60 LayoutSVGPath {svg:line} at (10,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.80] [x2=10.00] [y2=12.40] LayoutSVGPath {svg:line} at (60,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=60.00] [y1=0.80] [x2=60.00] [y2=12.40] LayoutSVGRect {svg:rect} at (10,0.80) size 50x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.80] [width=50.00] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 192.08x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 192.08x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 61 width 192.08: "Expected 'Text to Squeeze' to be selected, got: 'Text to Squ'" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 72.09: "Text to Squeeze" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 15 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png index 3af71bd0..80c4566 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt index a34e2ce..2d36208 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 73.44x17.69 + LayoutSVGContainer {g} at (10,0.80) size 40.27x11.60 LayoutSVGPath {svg:line} at (10,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.80] [x2=10.00] [y2=12.40] LayoutSVGPath {svg:line} at (50.27,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.27] [y1=0.80] [x2=50.27] [y2=12.40] LayoutSVGRect {svg:rect} at (10,0.80) size 40.27x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.80] [width=40.27] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 146.88x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 146.88x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 48 width 146.88: "Expected 'Text' to be selected, got: 'Text to S'" LayoutSVGText {text} at (10,0.80) size 140x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 140x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 64.29: "Text to Stretch" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 9 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png index eb36aae..ce60cf5e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt index 5a5d783..3169d42 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 74.66x17.69 + LayoutSVGContainer {g} at (56.36,0.80) size 18.29x11.60 LayoutSVGPath {svg:line} at (56.36,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=56.36] [y1=0.80] [x2=56.36] [y2=12.40] LayoutSVGPath {svg:line} at (74.66,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=74.66] [y1=0.80] [x2=74.66] [y2=12.40] LayoutSVGRect {svg:rect} at (56.36,0.80) size 18.29x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=56.36] [y=0.80] [width=18.29] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 119.59x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 119.59x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 119.60: "Expected 'to' to be selected, got: 'etc'" LayoutSVGText {text} at (10,0.80) size 140x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 140x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 64.29: "Text to Stretch" -selection start: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 14 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png index 8994f6a3..e9525e0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt index 3e7c979..f6ed3e9d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt
@@ -2,14 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 108.63x17.69 + LayoutSVGContainer {g} at (80.75,0.80) size 27.87x11.60 LayoutSVGPath {svg:line} at (80.75,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=80.75] [y1=0.80] [x2=80.75] [y2=12.40] LayoutSVGPath {svg:line} at (108.63,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=108.63] [y1=0.80] [x2=108.63] [y2=12.40] LayoutSVGRect {svg:rect} at (80.75,0.80) size 27.87x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=80.75] [y=0.80] [width=27.87] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 113.19x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 113.19x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 113.20: "Expected 'Str' to be selected, got: ''" LayoutSVGText {text} at (10,0.80) size 140x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 140x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 64.29: "Text to Stretch" -caret: position 15 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png index 19350c58..2f3bfdf0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt index c2748530..a7e6d09 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 61.74x17.49 + LayoutSVGContainer {g} at (10,1) size 12.79x11.20 LayoutSVGPath {svg:line} at (10,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=1.00] [x2=10.00] [y2=12.20] LayoutSVGPath {svg:line} at (22.79,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=22.79] [y1=1.00] [x2=22.79] [y2=12.20] LayoutSVGRect {svg:rect} at (10,1) size 12.79x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=1.00] [width=12.79] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 123.48x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 123.48x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 41 width 123.49: "Expected 'Text' to be selected, got: 'Te'" LayoutSVGText {text} at (10,1) size 50x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 50x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.71: "Text to Squeeze" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 2 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png index 21e7e7a..899d7f0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt index 78e2951..5a3af16 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 54.98x17.49 + LayoutSVGContainer {g} at (24.72,1) size 5.81x11.20 LayoutSVGPath {svg:line} at (24.72,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=24.72] [y1=1.00] [x2=24.72] [y2=12.20] LayoutSVGPath {svg:line} at (30.54,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=30.54] [y1=1.00] [x2=30.54] [y2=12.20] LayoutSVGRect {svg:rect} at (24.72,1) size 5.81x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=24.72] [y=1.00] [width=5.81] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 109.95x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 109.95x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 109.95: "Expected 'to' to be selected, got: 't'" LayoutSVGText {text} at (10,1) size 50x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 50x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.71: "Text to Squeeze" -selection start: position 3 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png index f2068f1..7a8124d3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt index e772b9c..0bde10f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 59.98x17.49 + LayoutSVGContainer {g} at (32.48,1) size 12.41x11.20 LayoutSVGPath {svg:line} at (32.48,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=32.48] [y1=1.00] [x2=32.48] [y2=12.20] LayoutSVGPath {svg:line} at (44.88,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=44.88] [y1=1.00] [x2=44.88] [y2=12.20] LayoutSVGRect {svg:rect} at (32.48,1) size 12.41x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=32.48] [y=1.00] [width=12.41] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 119.95x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 119.95x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 119.96: "Expected 'Squ' to be selected, got: 'o '" LayoutSVGText {text} at (10,1) size 50x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 50x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.71: "Text to Squeeze" -selection start: position 6 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png index a1a85db..4107288 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt index ce3483b..b4939717 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 94.63x17.49 + LayoutSVGContainer {g} at (10,1) size 50x11.20 LayoutSVGPath {svg:line} at (10,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=1.00] [x2=10.00] [y2=12.20] LayoutSVGPath {svg:line} at (60,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=60.00] [y1=1.00] [x2=60.00] [y2=12.20] LayoutSVGRect {svg:rect} at (10,1) size 50x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=1.00] [width=50.00] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 189.25x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 189.25x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 61 width 189.26: "Expected 'Text to Squeeze' to be selected, got: 'Text to Squ'" LayoutSVGText {text} at (10,1) size 50x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 50x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.71: "Text to Squeeze" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 15 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png index ed011e9..a36985f8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt index cd513ff..ecf9da71 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 72.19x17.49 + LayoutSVGContainer {g} at (10,1) size 40.17x11.20 LayoutSVGPath {svg:line} at (10,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=1.00] [x2=10.00] [y2=12.20] LayoutSVGPath {svg:line} at (50.17,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.17] [y1=1.00] [x2=50.17] [y2=12.20] LayoutSVGRect {svg:rect} at (10,1) size 40.17x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=1.00] [width=40.17] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 144.38x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 144.38x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 48 width 144.38: "Expected 'Text' to be selected, got: 'Text to S'" LayoutSVGText {text} at (10,1) size 140x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 140x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 63.92: "Text to Stretch" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 9 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png index 482620e2..4a75538 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt index f78a385e..6017474d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 74.52x17.49 + LayoutSVGContainer {g} at (56.26,1) size 18.27x11.20 LayoutSVGPath {svg:line} at (56.26,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=56.26] [y1=1.00] [x2=56.26] [y2=12.20] LayoutSVGPath {svg:line} at (74.52,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=74.52] [y1=1.00] [x2=74.52] [y2=12.20] LayoutSVGRect {svg:rect} at (56.26,1) size 18.27x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=56.26] [y=1.00] [width=18.27] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 117.05x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 117.05x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 117.05: "Expected 'to' to be selected, got: 'etc'" LayoutSVGText {text} at (10,1) size 140x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 140x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 63.92: "Text to Stretch" -selection start: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 14 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png index fae63176..2ce380655 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt index 83d9c5e0..327584b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt
@@ -2,14 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,1) size 108.60x17.49 + LayoutSVGContainer {g} at (80.61,1) size 28x11.20 LayoutSVGPath {svg:line} at (80.61,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=80.61] [y1=1.00] [x2=80.61] [y2=12.20] LayoutSVGPath {svg:line} at (108.60,1) size 0x11.20 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=108.60] [y1=1.00] [x2=108.60] [y2=12.20] LayoutSVGRect {svg:rect} at (80.61,1) size 28x11.20 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=80.61] [y=1.00] [width=27.99] [height=11.20] - LayoutSVGText {svg:text} at (0,27.80) size 110.84x9.19 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,27.80) size 110.84x9.19 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 110.84: "Expected 'Str' to be selected, got: ''" LayoutSVGText {text} at (10,1) size 140x11.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,1) size 140x11.19 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 63.92: "Text to Stretch" -caret: position 15 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 63f9df1..f0ce0bc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -620,6 +620,7 @@ getter effectiveType getter onchange getter rtt + getter saveData method constructor setter onchange interface Notification : EventTarget
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png index bf865d3..aa2ada4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt index e20539eb1..bb1942d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 61.23x17.69 + LayoutSVGContainer {g} at (10,0.80) size 12.72x11.60 LayoutSVGPath {svg:line} at (10,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.80] [x2=10.00] [y2=12.40] LayoutSVGPath {svg:line} at (22.72,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=22.72] [y1=0.80] [x2=22.72] [y2=12.40] LayoutSVGRect {svg:rect} at (10,0.80) size 12.72x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.80] [width=12.72] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 122.47x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 122.47x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 41 width 122.48: "Expected 'Text' to be selected, got: 'Te'" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.89: "Text to Squeeze" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 2 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png index c0ae434..eb4dbae2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt index a24ab41..f629e60 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 54.59x17.69 + LayoutSVGContainer {g} at (24.67,0.80) size 5.84x11.60 LayoutSVGPath {svg:line} at (24.67,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=24.67] [y1=0.80] [x2=24.67] [y2=12.40] LayoutSVGPath {svg:line} at (30.51,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=30.51] [y1=0.80] [x2=30.51] [y2=12.40] LayoutSVGRect {svg:rect} at (24.67,0.80) size 5.84x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=24.67] [y=0.80] [width=5.84] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 109.19x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 109.19x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 109.20: "Expected 'to' to be selected, got: 't'" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.89: "Text to Squeeze" -selection start: position 3 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png index 49f892a..d143bd4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt index 40db483..1911087 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 59.59x17.69 + LayoutSVGContainer {g} at (32.46,0.80) size 12.38x11.60 LayoutSVGPath {svg:line} at (32.46,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=32.46] [y1=0.80] [x2=32.46] [y2=12.40] LayoutSVGPath {svg:line} at (44.84,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=44.84] [y1=0.80] [x2=44.84] [y2=12.40] LayoutSVGRect {svg:rect} at (32.46,0.80) size 12.38x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=32.46] [y=0.80] [width=12.38] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 119.19x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 119.19x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 119.20: "Expected 'Squ' to be selected, got: 'o '" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.89: "Text to Squeeze" -selection start: position 6 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png index 6bc1d7b..fe6c40d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt index 5f999bb..8dfa525a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 93.04x17.69 + LayoutSVGContainer {g} at (10,0.80) size 50x11.60 LayoutSVGPath {svg:line} at (10,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.80] [x2=10.00] [y2=12.40] LayoutSVGPath {svg:line} at (60,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=60.00] [y1=0.80] [x2=60.00] [y2=12.40] LayoutSVGRect {svg:rect} at (10,0.80) size 50x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.80] [width=50.00] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 186.08x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 186.08x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 61 width 186.08: "Expected 'Text to Squeeze' to be selected, got: 'Text to Squ'" LayoutSVGText {text} at (10,0.80) size 50x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 50x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 71.89: "Text to Squeeze" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 15 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png index 9f08312..c096dbf1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt index 0074dd97..e49497a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 71.23x17.69 + LayoutSVGContainer {g} at (10,0.80) size 39.96x11.60 LayoutSVGPath {svg:line} at (10,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.80] [x2=10.00] [y2=12.40] LayoutSVGPath {svg:line} at (49.96,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=49.96] [y1=0.80] [x2=49.96] [y2=12.40] LayoutSVGRect {svg:rect} at (10,0.80) size 39.96x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.80] [width=39.96] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 142.47x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 142.47x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 48 width 142.48: "Expected 'Text' to be selected, got: 'Text to S'" LayoutSVGText {text} at (10,0.80) size 140x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 140x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 64.09: "Text to Stretch" selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 9 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png index 68b6db1..57a53fb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt index a6eadfffc..af70477 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt
@@ -2,15 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 74.42x17.69 + LayoutSVGContainer {g} at (56.07,0.80) size 18.35x11.60 LayoutSVGPath {svg:line} at (56.07,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=56.07] [y1=0.80] [x2=56.07] [y2=12.40] LayoutSVGPath {svg:line} at (74.42,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=74.42] [y1=0.80] [x2=74.42] [y2=12.40] LayoutSVGRect {svg:rect} at (56.07,0.80) size 18.35x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=56.07] [y=0.80] [width=18.35] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 116.39x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 116.39x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 116.40: "Expected 'to' to be selected, got: 'etc'" LayoutSVGText {text} at (10,0.80) size 140x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 140x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 64.09: "Text to Stretch" -selection start: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document -selection end: position 14 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png index 6614436..895d34c6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt index 6cda5b6..947e36c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt
@@ -2,14 +2,12 @@ LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGContainer {g} at (0,0.80) size 108.50x17.69 + LayoutSVGContainer {g} at (80.54,0.80) size 27.96x11.60 LayoutSVGPath {svg:line} at (80.54,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=80.54] [y1=0.80] [x2=80.54] [y2=12.40] LayoutSVGPath {svg:line} at (108.50,0.80) size 0x11.60 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=108.50] [y1=0.80] [x2=108.50] [y2=12.40] LayoutSVGRect {svg:rect} at (80.54,0.80) size 27.96x11.40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=80.54] [y=0.80] [width=27.96] [height=11.40] - LayoutSVGText {svg:text} at (0,28.19) size 110.39x8.80 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,28.19) size 110.39x8.80 - chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 110.40: "Expected 'Str' to be selected, got: ''" LayoutSVGText {text} at (10,0.80) size 140x11.39 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,0.80) size 140x11.39 chunk 1 text run 1 at (10.00,10.00) startOffset 0 endOffset 15 width 64.09: "Text to Stretch" -caret: position 15 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document +selection end: position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 63f9df1..f0ce0bc 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -620,6 +620,7 @@ getter effectiveType getter onchange getter rtt + getter saveData method constructor setter onchange interface Notification : EventTarget
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt index 9c6a6bf7..bbf6842 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -600,6 +600,7 @@ [Worker] getter effectiveType [Worker] getter onchange [Worker] getter rtt +[Worker] getter saveData [Worker] method constructor [Worker] setter onchange [Worker] interface Notification : EventTarget
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt index 5aad7c67..247bb61 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -3760,6 +3760,7 @@ getter effectiveType getter onchange getter rtt + getter saveData method constructor setter onchange interface Node : EventTarget
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt index cc84aca..49b14b46 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -595,6 +595,7 @@ [Worker] getter effectiveType [Worker] getter onchange [Worker] getter rtt +[Worker] getter saveData [Worker] method constructor [Worker] setter onchange [Worker] interface Notification : EventTarget
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSource.cpp b/third_party/WebKit/Source/core/css/CSSFontFaceSource.cpp index b68dbcd3..cff0b10e 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFaceSource.cpp +++ b/third_party/WebKit/Source/core/css/CSSFontFaceSource.cpp
@@ -31,6 +31,17 @@ #include "platform/fonts/FontFaceCreationParams.h" #include "platform/fonts/SimpleFontData.h" +namespace { +// An excessive amount of SimpleFontData objects is generated from +// CSSFontFaceSource if a lot of varying FontDescriptions point to a web +// font. These FontDescriptions can vary in size, font-feature-settings or +// font-variation settings. Well known cases are animations of font-variation +// settings, compare crbug.com/778352. For a start, let's reduce this number to +// 1024, which is still a large number and should have enough steps for font +// animations from the same font face source, but avoids unbounded growth. +const size_t kMaxCachedFontData = 1024; +} // namespace + namespace blink { CSSFontFaceSource::~CSSFontFaceSource() = default; @@ -53,11 +64,28 @@ font_data_table_.insert(key, nullptr).stored_value->value; if (!font_data) font_data = CreateFontData(font_description, font_selection_capabilities); + + font_cache_key_age.PrependOrMoveToFirst(key); + PruneOldestIfNeeded(); + + DCHECK_LE(font_data_table_.size(), kMaxCachedFontData); // No release, because fontData is a reference to a RefPtr that is held in the // font_data_table_. return font_data; } +void CSSFontFaceSource::PruneOldestIfNeeded() { + if (font_cache_key_age.size() > kMaxCachedFontData) { + DCHECK_EQ(font_cache_key_age.size() - 1, kMaxCachedFontData); + FontCacheKey& key = font_cache_key_age.back(); + font_cache_key_age.pop_back(); + auto font_data_entry = font_data_table_.Take(key); + DCHECK_EQ(font_cache_key_age.size(), kMaxCachedFontData); + if (font_data_entry && font_data_entry->GetCustomFontData()) + font_data_entry->GetCustomFontData()->ClearFontFaceSource(); + } +} + void CSSFontFaceSource::PruneTable() { if (font_data_table_.IsEmpty()) return; @@ -67,6 +95,7 @@ if (font_data && font_data->GetCustomFontData()) font_data->GetCustomFontData()->ClearFontFaceSource(); } + font_cache_key_age.clear(); font_data_table_.clear(); }
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSource.h b/third_party/WebKit/Source/core/css/CSSFontFaceSource.h index edb66950..e78293b 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFaceSource.h +++ b/third_party/WebKit/Source/core/css/CSSFontFaceSource.h
@@ -33,6 +33,7 @@ #include "platform/heap/Handle.h" #include "platform/wtf/Allocator.h" #include "platform/wtf/HashMap.h" +#include "platform/wtf/LinkedHashSet.h" namespace blink { @@ -71,12 +72,16 @@ void PruneTable(); private: + void PruneOldestIfNeeded(); using FontDataTable = HashMap<FontCacheKey, scoped_refptr<SimpleFontData>, FontCacheKeyHash, FontCacheKeyTraits>; + using FontCacheKeyAgeList = + LinkedHashSet<FontCacheKey, FontCacheKeyHash, FontCacheKeyTraits>; FontDataTable font_data_table_; + FontCacheKeyAgeList font_cache_key_age; DISALLOW_COPY_AND_ASSIGN(CSSFontFaceSource); };
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp b/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp index ce9c813..64e1a3ce 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp +++ b/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
@@ -56,4 +56,27 @@ font_face_source.GetFontDataForSize(4925)); } +// Exercises the size font_data_table_ assertions in CSSFontFaceSource. +TEST(CSSFontFaceSourceTest, UnboundedGrowth) { + DummyFontFaceSource font_face_source; + FontDescription font_description_variable; + FontSelectionCapabilities normal_capabilities( + {NormalWidthValue(), NormalWidthValue()}, + {NormalSlopeValue(), NormalSlopeValue()}, + {NormalWeightValue(), NormalWeightValue()}); + + // Roughly 3000 font variants. + for (float wght = 700; wght < 705; wght += 1 / 6.f) { + for (float wdth = 100; wdth < 125; wdth += 1 / 4.f) { + scoped_refptr<FontVariationSettings> variation_settings = + FontVariationSettings::Create(); + variation_settings->Append(FontVariationAxis("wght", wght)); + variation_settings->Append(FontVariationAxis("wdth", wdth)); + font_description_variable.SetVariationSettings(variation_settings); + font_face_source.GetFontData(font_description_variable, + normal_capabilities); + } + } +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp index 0eb2f43..bc225c0 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
@@ -604,20 +604,32 @@ return args.AtEnd(); } -static bool ParseHSLParameters(CSSParserTokenRange& range, - RGBA32& result, - bool parse_alpha) { +static bool ParseHSLParameters(CSSParserTokenRange& range, RGBA32& result) { DCHECK(range.Peek().FunctionId() == CSSValueHsl || range.Peek().FunctionId() == CSSValueHsla); CSSParserTokenRange args = ConsumeFunction(range); - CSSPrimitiveValue* hsl_value = ConsumeNumber(args, kValueRangeAll); - if (!hsl_value) - return false; - double color_array[3]; - color_array[0] = (((hsl_value->GetIntValue() % 360) + 360) % 360) / 360.0; - for (int i = 1; i < 3; i++) { - if (!ConsumeCommaIncludingWhitespace(args)) + CSSPrimitiveValue* hsl_value = ConsumeAngle(args, nullptr, WTF::nullopt); + double angle_value; + if (!hsl_value) { + hsl_value = ConsumeNumber(args, kValueRangeAll); + if (!hsl_value) return false; + angle_value = hsl_value->GetDoubleValue(); + } else { + angle_value = hsl_value->ComputeDegrees(); + } + double color_array[3]; + color_array[0] = fmod(fmod(angle_value, 360.0) + 360.0, 360.0) / 60.0; + bool requires_commas = false; + for (int i = 1; i < 3; i++) { + if (ConsumeCommaIncludingWhitespace(args)) { + if (i != 1 && !requires_commas) + return false; + requires_commas = true; + } else if (requires_commas || args.AtEnd() || + (&args.Peek() - 1)->GetType() != kWhitespaceToken) { + return false; + } hsl_value = ConsumePercent(args, kValueRangeAll); if (!hsl_value) return false; @@ -625,12 +637,21 @@ color_array[i] = clampTo<double>(double_value, 0.0, 100.0) / 100.0; // Needs to be value between 0 and 1.0. } + double alpha = 1.0; - if (parse_alpha) { - if (!ConsumeCommaIncludingWhitespace(args)) - return false; - if (!ConsumeNumberRaw(args, alpha)) - return false; + bool comma_consumed = ConsumeCommaIncludingWhitespace(args); + bool slash_consumed = ConsumeSlashIncludingWhitespace(args); + if ((comma_consumed && !requires_commas) || + (slash_consumed && requires_commas)) + return false; + if (comma_consumed || slash_consumed) { + if (!ConsumeNumberRaw(args, alpha)) { + CSSPrimitiveValue* alpha_percent = ConsumePercent(args, kValueRangeAll); + if (!alpha_percent) + return false; + else + alpha = alpha_percent->GetDoubleValue() / 100.0f; + } alpha = clampTo<double>(alpha, 0.0, 1.0); } result = @@ -680,8 +701,7 @@ CSSParserTokenRange color_range = range; if ((function_id <= CSSValueRgba && !ParseRGBParameters(color_range, result)) || - (function_id >= CSSValueHsl && - !ParseHSLParameters(color_range, result, function_id == CSSValueHsla))) + (function_id >= CSSValueHsl && !ParseHSLParameters(color_range, result))) return false; range = color_range; return true;
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp index 16cc440..940b57a 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp
@@ -203,7 +203,7 @@ int offset = closest_distance_box->OffsetForPositionInFragment( *closest_distance_fragment, - LayoutUnit(absolute_point.X() - closest_distance_position), true); + absolute_point.X() - closest_distance_position); return CreatePositionWithAffinity(offset + closest_distance_box->Start(), offset > 0 ? TextAffinity::kUpstreamIfPossible
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextFragment.h b/third_party/WebKit/Source/core/layout/svg/SVGTextFragment.h index 4463932..182735e 100644 --- a/third_party/WebKit/Source/core/layout/svg/SVGTextFragment.h +++ b/third_party/WebKit/Source/core/layout/svg/SVGTextFragment.h
@@ -82,6 +82,8 @@ return BuildNormalFragmentTransform(); } + bool AffectedByTextLength() const { return length_adjust_scale != 1; } + bool IsTransformed() const { return AffectedByTextLength() || !transform.IsIdentity(); } @@ -106,7 +108,7 @@ // (see SVGTextLayoutEngine, which builds this transformation). AffineTransform transform; - // Contains lengthAdjust related transformations, which are not allowd to + // Contains lengthAdjust related transformations, which are not allowed to // influence the SVGTextQuery code. float length_adjust_scale; float length_adjust_bias; @@ -118,8 +120,6 @@ return BuildTransformForTextOnLine(); } - bool AffectedByTextLength() const { return length_adjust_scale != 1; } - void TransformAroundOrigin(AffineTransform& result) const { // Returns (translate(x, y) * result) * translate(-x, -y). result.SetE(result.E() + x);
diff --git a/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp b/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp index 6171971..de209c95 100644 --- a/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp +++ b/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.cpp
@@ -67,29 +67,24 @@ int SVGInlineTextBox::OffsetForPositionInFragment( const SVGTextFragment& fragment, - LayoutUnit position, - bool include_partial_glyphs) const { + float position) const { LineLayoutSVGInlineText line_layout_item = LineLayoutSVGInlineText(GetLineLayoutItem()); - float scaling_factor = line_layout_item.ScalingFactor(); - DCHECK(scaling_factor); + // Adjust position for the scaled font size. + DCHECK(line_layout_item.ScalingFactor()); + position *= line_layout_item.ScalingFactor(); - const ComputedStyle& style = line_layout_item.StyleRef(); + // If this fragment is subjected to 'textLength' glyph adjustments, then + // apply the inverse to the position within the fragment. + if (fragment.AffectedByTextLength()) + position /= fragment.length_adjust_scale; - TextRun text_run = ConstructTextRun(style, fragment); - - // Eventually handle lengthAdjust="spacingAndGlyphs". - // FIXME: Handle vertical text. - if (fragment.IsTransformed()) { - AffineTransform fragment_transform = fragment.BuildFragmentTransform(); - text_run.SetHorizontalGlyphStretch( - clampTo<float>(fragment_transform.XScale())); - } - + const bool include_partial_glyphs = true; + TextRun text_run = ConstructTextRun(line_layout_item.StyleRef(), fragment); return fragment.character_offset - Start() + line_layout_item.ScaledFont().OffsetForPosition( - text_run, position * scaling_factor, include_partial_glyphs); + text_run, position, include_partial_glyphs); } LayoutUnit SVGInlineTextBox::PositionForOffset(int) const {
diff --git a/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.h b/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.h index d509687d..66923f85 100644 --- a/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.h +++ b/third_party/WebKit/Source/core/layout/svg/line/SVGInlineTextBox.h
@@ -71,9 +71,7 @@ starts_new_text_chunk_ = new_text_chunk; } - int OffsetForPositionInFragment(const SVGTextFragment&, - LayoutUnit position, - bool include_partial_glyphs) const; + int OffsetForPositionInFragment(const SVGTextFragment&, float position) const; FloatRect SelectionRectForTextFragment(const SVGTextFragment&, int fragment_start_position, int fragment_end_position,
diff --git a/third_party/WebKit/Source/platform/graphics/Color.cpp b/third_party/WebKit/Source/platform/graphics/Color.cpp index e2a3117..42c632b1 100644 --- a/third_party/WebKit/Source/platform/graphics/Color.cpp +++ b/third_party/WebKit/Source/platform/graphics/Color.cpp
@@ -73,23 +73,23 @@ static double CalcHue(double temp1, double temp2, double hue_val) { if (hue_val < 0.0) - hue_val++; - else if (hue_val > 1.0) - hue_val--; - if (hue_val * 6.0 < 1.0) - return temp1 + (temp2 - temp1) * hue_val * 6.0; - if (hue_val * 2.0 < 1.0) + hue_val += 6.0; + else if (hue_val >= 6.0) + hue_val -= 6.0; + if (hue_val < 1.0) + return temp1 + (temp2 - temp1) * hue_val; + if (hue_val < 3.0) return temp2; - if (hue_val * 3.0 < 2.0) - return temp1 + (temp2 - temp1) * (2.0 / 3.0 - hue_val) * 6.0; + if (hue_val < 4.0) + return temp1 + (temp2 - temp1) * (4.0 - hue_val); return temp1; } -// Explanation of this algorithm can be found in the CSS3 Color Module -// specification at http://www.w3.org/TR/css3-color/#hsl-color with further -// explanation available at http://en.wikipedia.org/wiki/HSL_color_space +// Explanation of this algorithm can be found in the CSS Color 4 Module +// specification at https://drafts.csswg.org/css-color-4/#hsl-to-rgb with +// further explanation available at http://en.wikipedia.org/wiki/HSL_color_space -// all values are in the range of 0 to 1.0 +// Hue is in the range of 0 to 6.0, the remainder are in the range 0 to 1.0 RGBA32 MakeRGBAFromHSLA(double hue, double saturation, double lightness, @@ -102,15 +102,15 @@ static_cast<int>(alpha * scale_factor)); } - double temp2 = lightness < 0.5 + double temp2 = lightness <= 0.5 ? lightness * (1.0 + saturation) : lightness + saturation - lightness * saturation; double temp1 = 2.0 * lightness - temp2; return MakeRGBA( - static_cast<int>(CalcHue(temp1, temp2, hue + 1.0 / 3.0) * scale_factor), + static_cast<int>(CalcHue(temp1, temp2, hue + 2.0) * scale_factor), static_cast<int>(CalcHue(temp1, temp2, hue) * scale_factor), - static_cast<int>(CalcHue(temp1, temp2, hue - 1.0 / 3.0) * scale_factor), + static_cast<int>(CalcHue(temp1, temp2, hue - 2.0) * scale_factor), static_cast<int>(alpha * scale_factor)); }
diff --git a/third_party/WebKit/Source/platform/runtime_enabled_features.json5 b/third_party/WebKit/Source/platform/runtime_enabled_features.json5 index 8f22b93..3c1f602 100644 --- a/third_party/WebKit/Source/platform/runtime_enabled_features.json5 +++ b/third_party/WebKit/Source/platform/runtime_enabled_features.json5
@@ -683,7 +683,7 @@ }, { name: "NetInfoSaveData", - status: "experimental", + status: "stable", }, { name: "NetworkService",
diff --git a/third_party/WebKit/Source/platform/text/TextRun.cpp b/third_party/WebKit/Source/platform/text/TextRun.cpp index 6bbd56de..46ec0d0 100644 --- a/third_party/WebKit/Source/platform/text/TextRun.cpp +++ b/third_party/WebKit/Source/platform/text/TextRun.cpp
@@ -34,9 +34,7 @@ DISALLOW_NEW(); const void* pointer; int integers[2]; - float float1; - float float2; - float float3; + float floats[2]; uint32_t bitfields : 10; TabSize tab_size; };
diff --git a/third_party/WebKit/Source/platform/text/TextRun.h b/third_party/WebKit/Source/platform/text/TextRun.h index 7e879aca..b7e2743 100644 --- a/third_party/WebKit/Source/platform/text/TextRun.h +++ b/third_party/WebKit/Source/platform/text/TextRun.h
@@ -67,7 +67,6 @@ : characters_length_(len), len_(len), xpos_(xpos), - horizontal_glyph_stretch_(1), expansion_(expansion), expansion_behavior_(expansion_behavior), is8_bit_(true), @@ -92,7 +91,6 @@ : characters_length_(len), len_(len), xpos_(xpos), - horizontal_glyph_stretch_(1), expansion_(expansion), expansion_behavior_(expansion_behavior), is8_bit_(false), @@ -116,7 +114,6 @@ : characters_length_(string.length()), len_(string.length()), xpos_(xpos), - horizontal_glyph_stretch_(1), expansion_(expansion), expansion_behavior_(expansion_behavior), allow_tabs_(false), @@ -226,10 +223,6 @@ void SetExpansionBehavior(ExpansionBehavior behavior) { expansion_behavior_ = behavior; } - float HorizontalGlyphStretch() const { return horizontal_glyph_stretch_; } - void SetHorizontalGlyphStretch(float scale) { - horizontal_glyph_stretch_ = scale; - } bool AllowTabs() const { return allow_tabs_; } TabSize GetTabSize() const { return tab_size_; } @@ -288,7 +281,6 @@ // alignment or center alignment, left start of the text line is not the same // as left start of the containing block. float xpos_; - float horizontal_glyph_stretch_; float expansion_; ExpansionBehavior expansion_behavior_ : 2;
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py index ce062d76..907a10b8 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py
@@ -2,6 +2,13 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +"""A limited finder & parser for Chromium OWNERS files. + +This module is intended to be used within LayoutTests/external and is +informative only. For authoritative uses, please rely on `git cl owners`. +For example, it does not support directives other than email addresses. +""" + import collections import re @@ -12,8 +19,8 @@ # Format of OWNERS files can be found at //src/third_party/depot_tools/owners.py # In our use case (under external/wpt), we only process the first enclosing -# non-empty OWNERS file for any given path (i.e. always assuming "set noparent"), -# and we only care about lines that are valid email addresses. +# OWNERS file for any given path (i.e. always assuming "set noparent"), and we +# ignore "per-file:" lines, "file:" directives, etc. # Recognizes 'X@Y' email addresses. Very simplistic. (from owners.py) BASIC_EMAIL_REGEXP = r'^[\w\-\+\%\.]+\@[\w\-\+\%\.]+$' @@ -39,60 +46,59 @@ owned directories (paths relative to the root of layout tests). """ email_map = collections.defaultdict(set) + external_root_owners = self.finder.path_from_layout_tests('external', 'OWNERS') for relpath in changed_files: + # Try to find the first *non-empty* OWNERS file. absolute_path = self.finder.path_from_chromium_base(relpath) - if not absolute_path.startswith(self.finder.layout_tests_dir()): + owners = None + owners_file = self.find_owners_file(absolute_path) + while owners_file: + owners = self.extract_owners(owners_file) + if owners: + break + # Found an empty OWNERS file. Try again from the parent directory. + absolute_path = self.filesystem.dirname(self.filesystem.dirname(owners_file)) + owners_file = self.find_owners_file(absolute_path) + # Skip LayoutTests/external/OWNERS. + if not owners or owners_file == external_root_owners: continue - owners_file = self.find_owners_file(self.filesystem.dirname(relpath)) - if not owners_file: - continue - owners = self.extract_owners(owners_file) + owned_directory = self.filesystem.dirname(owners_file) owned_directory_relpath = self.filesystem.relpath(owned_directory, self.finder.layout_tests_dir()) email_map[tuple(owners)].add(owned_directory_relpath) return {owners: sorted(owned_directories) for owners, owned_directories in email_map.iteritems()} - # TODO(robertma): Do we really need to worry about empty OWNERS files? - def find_owners_file(self, start_directory): - """Find the first enclosing OWNERS file for a given path. + def find_owners_file(self, start_path): + """Finds the first enclosing OWNERS file for a given path. - Starting from the given directory, walks up the directory tree until the - first non-empty OWNERS file is found or LayoutTests/external is reached. - (OWNERS files with no valid emails are also considered empty.) + Starting from the given path, walks up the directory tree until the + first OWNERS file is found or LayoutTests/external is reached. Args: - start_directory: A relative path from the root of the repository, or - an absolute path. + start_path: A relative path from the root of the repository, or an + absolute path. The path can be a file or a directory. Returns: - The absolute path to the first non-empty OWNERS file found, or None - if not found. + The absolute path to the first OWNERS file found; None if not found + or if start_path is outside of LayoutTests/external. """ - if self.filesystem.isabs(start_directory): - directory = start_directory - else: - directory = self.finder.path_from_chromium_base(start_directory) + abs_start_path = (start_path if self.filesystem.isabs(start_path) + else self.finder.path_from_chromium_base(start_path)) + directory = (abs_start_path if self.filesystem.isdir(abs_start_path) + else self.filesystem.dirname(abs_start_path)) external_root = self.finder.path_from_layout_tests('external') - # Changes to both LayoutTests/TestExpectations and the entire - # LayoutTests/FlagExpectations/ directory should be skipped and not - # raise an assertion. - if directory == self.finder.layout_tests_dir() or \ - directory.startswith(self.finder.path_from_layout_tests('FlagExpectations')): + if not directory.startswith(external_root): return None - assert directory.startswith(external_root), '%s must start with %s' % ( - directory, external_root) - while directory != external_root: + # Stop at LayoutTests, which is the parent of external_root. + while directory != self.finder.layout_tests_dir(): owners_file = self.filesystem.join(directory, 'OWNERS') if self.filesystem.isfile(self.finder.path_from_chromium_base(owners_file)): - # TODO(robertma): Avoid parsing the file twice (find_owners_file - # only returns the path, which is read and parsed again later). - if self.extract_owners(owners_file): - return owners_file + return owners_file directory = self.filesystem.dirname(directory) return None def extract_owners(self, owners_file): - """Extract owners from an OWNERS file. + """Extracts owners from an OWNERS file. Args: owners_file: An absolute path to an OWNERS file. @@ -110,7 +116,7 @@ return addresses def extract_component(self, owners_file): - """Extract the component from an OWNERS file. + """Extracts the component from an OWNERS file. Args: owners_file: An absolute path to an OWNERS file.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py index 2b810c4..e423775 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py
@@ -14,77 +14,120 @@ class DirectoryOwnersExtractorTest(unittest.TestCase): def setUp(self): - self.filesystem = MockFileSystem() + # We always have an OWNERS file at LayoutTests/external. + self.filesystem = MockFileSystem(files={ + '/mock-checkout/third_party/WebKit/LayoutTests/external/OWNERS': 'ecosystem-infra@chromium.org' + }) self.extractor = DirectoryOwnersExtractor(self.filesystem) - def test_list_owners(self): - self.filesystem.files = { + def _write_files(self, files): + # Use write_text_file instead of directly assigning to filesystem.files + # so that intermediary directories are correctly created, too. + for path, contents in files.iteritems(): + self.filesystem.write_text_file(path, contents) + + def test_list_owners_combines_same_owners(self): + self._write_files({ ABS_WPT_BASE + '/foo/x.html': '', ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org\nc@chromium.org\n', ABS_WPT_BASE + '/bar/x/y.html': '', ABS_WPT_BASE + '/bar/OWNERS': 'a@chromium.org\nc@chromium.org\n', - ABS_WPT_BASE + '/baz/x/y.html': '', - ABS_WPT_BASE + '/baz/x/OWNERS': 'b@chromium.org\n', - ABS_WPT_BASE + '/quux/x/y.html': '', - } + }) changed_files = [ - # Same owners: REL_WPT_BASE + '/foo/x.html', REL_WPT_BASE + '/bar/x/y.html', - # Same owned directories: - REL_WPT_BASE + '/baz/x/y.html', - REL_WPT_BASE + '/baz/x/z.html', - # Owners not found: - REL_WPT_BASE + '/quux/x/y.html', ] self.assertEqual( self.extractor.list_owners(changed_files), - {('a@chromium.org', 'c@chromium.org'): ['external/wpt/bar', 'external/wpt/foo'], - ('b@chromium.org',): ['external/wpt/baz/x']} + {('a@chromium.org', 'c@chromium.org'): ['external/wpt/bar', 'external/wpt/foo']} ) - def test_find_owners_file_current_dir(self): - self.filesystem.files = { + def test_list_owners_combines_same_directory(self): + self._write_files({ + ABS_WPT_BASE + '/baz/x/y.html': '', + ABS_WPT_BASE + '/baz/x/y/z.html': '', + ABS_WPT_BASE + '/baz/x/OWNERS': 'foo@chromium.org\n', + }) + changed_files = [ + REL_WPT_BASE + '/baz/x/y.html', + REL_WPT_BASE + '/baz/x/y/z.html', + ] + self.assertEqual( + self.extractor.list_owners(changed_files), + {('foo@chromium.org',): ['external/wpt/baz/x']} + ) + + def test_list_owners_skips_empty_owners(self): + self._write_files({ + ABS_WPT_BASE + '/baz/x/y/z.html': '', + ABS_WPT_BASE + '/baz/x/y/OWNERS': '# Some comments\n', + ABS_WPT_BASE + '/baz/x/OWNERS': 'foo@chromium.org\n', + }) + changed_files = [ + REL_WPT_BASE + '/baz/x/y/z.html', + ] + self.assertEqual( + self.extractor.list_owners(changed_files), + {('foo@chromium.org',): ['external/wpt/baz/x']} + ) + + def test_list_owners_not_found(self): + self._write_files({ + # Although LayoutTests/external/OWNERS exists, it should not be listed. + ABS_WPT_BASE + '/foo/bar.html': '', + # Files out of external. + '/mock-checkout/third_party/WebKit/LayoutTests/TestExpectations': '', + '/mock-checkout/third_party/WebKit/LayoutTests/OWNERS': 'foo@chromium.org', + }) + changed_files = [ + REL_WPT_BASE + '/foo/bar.html', + 'third_party/WebKit/LayoutTests/TestExpectations', + ] + self.assertEqual(self.extractor.list_owners(changed_files), {}) + + def test_find_owners_file_at_current_dir(self): + self._write_files({ ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org' - } + }) self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/foo'), ABS_WPT_BASE + '/foo/OWNERS') - def test_find_owners_file_ancestor(self): - self.filesystem.files = { + def test_find_owners_file_at_ancestor(self): + self._write_files({ ABS_WPT_BASE + '/x/OWNERS': 'a@chromium.org', ABS_WPT_BASE + '/x/y/z.html': '', - } + }) self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'), ABS_WPT_BASE + '/x/OWNERS') - def test_find_owners_file_not_found(self): - self.filesystem.files = { - ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org', - '/mock-checkout/third_party/WebKit/LayoutTests/external/OWNERS': 'a@chromium.org', + def test_find_owners_file_stops_at_external_root(self): + self._write_files({ ABS_WPT_BASE + '/x/y/z.html': '', - } - self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'), None) + }) + self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'), + '/mock-checkout/third_party/WebKit/LayoutTests/external/OWNERS') - def test_find_owners_file_skip_empty(self): - self.filesystem.files = { - ABS_WPT_BASE + '/x/OWNERS': 'a@chromium.org', - ABS_WPT_BASE + '/x/y/OWNERS': '# b@chromium.org', - ABS_WPT_BASE + '/x/y/z.html': '', - } - self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'), ABS_WPT_BASE + '/x/OWNERS') + def test_find_owners_file_takes_four_kinds_of_paths(self): + owners_path = ABS_WPT_BASE + '/foo/OWNERS' + self._write_files({ + owners_path: 'a@chromium.org', + ABS_WPT_BASE + '/foo/bar.html': '', + }) + # Absolute paths of directories. + self.assertEqual(self.extractor.find_owners_file(ABS_WPT_BASE + '/foo'), owners_path) + # Relative paths of directories. + self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/foo'), owners_path) + # Absolute paths of files. + self.assertEqual(self.extractor.find_owners_file(ABS_WPT_BASE + '/foo/bar.html'), owners_path) + # Relative paths of files. + self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/foo/bar.html'), owners_path) - def test_find_owners_file_absolute_path(self): - self.filesystem.files = { - ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org' - } - self.assertEqual(self.extractor.find_owners_file(ABS_WPT_BASE + '/foo'), ABS_WPT_BASE + '/foo/OWNERS') - - def test_find_owners_file_out_of_tree(self): - with self.assertRaises(AssertionError): - self.extractor.find_owners_file('third_party/WebKit/LayoutTests/other') - self.assertEqual( - self.extractor.find_owners_file('third_party/WebKit/LayoutTests'), None) - self.assertEqual( - self.extractor.find_owners_file('third_party/WebKit/LayoutTests/FlagExpectations/foo-bar'), None) + def test_find_owners_file_out_of_external(self): + self._write_files({ + '/mock-checkout/third_party/WebKit/LayoutTests/OWNERS': 'foo@chromium.org', + '/mock-checkout/third_party/WebKit/LayoutTests/other/some_file': '', + }) + self.assertIsNone(self.extractor.find_owners_file('third_party/WebKit/LayoutTests')) + self.assertIsNone(self.extractor.find_owners_file('third_party/WebKit/LayoutTests/other')) + self.assertIsNone(self.extractor.find_owners_file('third_party')) def test_extract_owners(self): self.filesystem.files = {
diff --git a/third_party/dom_distiller_js/README.chromium b/third_party/dom_distiller_js/README.chromium index ce89f36..60ea9c1 100644 --- a/third_party/dom_distiller_js/README.chromium +++ b/third_party/dom_distiller_js/README.chromium
@@ -1,6 +1,6 @@ Name: dom-distiller-js URL: https://github.com/chromium/dom-distiller -Version: 0bde3157d7 +Version: 9596033e36 License: BSD Security Critical: yes
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 20cf2f8..8d7e512 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -24710,6 +24710,7 @@ <int value="-1861814223" label="MidiManagerDynamicInstantiation:enabled"/> <int value="-1860481724" label="ChromeHomeExpandButton:enabled"/> <int value="-1856902397" label="LoadingWithMojo:enabled"/> + <int value="-1854432127" label="ChromeHomePullToRefreshIphAtTop:disabled"/> <int value="-1854372227" label="VrBrowsingExperimentalFeatures:enabled"/> <int value="-1849706663" label="enable-password-force-saving:disabled"/> <int value="-1847888049" label="AutofillSendBillingCustomerNumber:enabled"/> @@ -24913,6 +24914,7 @@ <int value="-1322882747" label="disable-datasaver-prompt"/> <int value="-1319688939" label="ignore-gpu-blacklist"/> <int value="-1318914924" label="OverflowIconsForMediaControls:enabled"/> + <int value="-1314603238" label="ChromeHomePullToRefreshIphAtTop:enabled"/> <int value="-1310737697" label="MaterialDesignSettings:enabled"/> <int value="-1302904242" label="enable-navigation-tracing"/> <int value="-1294050129" label="ContentFullscreen:disabled"/>
diff --git a/ui/aura/env.h b/ui/aura/env.h index a1870db..bf0e4019 100644 --- a/ui/aura/env.h +++ b/ui/aura/env.h
@@ -118,6 +118,11 @@ } ui::ContextFactory* context_factory() { return context_factory_; } + void set_throttle_input_on_resize_for_testing(bool throttle_input) { + throttle_input_on_resize_ = throttle_input; + } + bool throttle_input_on_resize() const { return throttle_input_on_resize_; } + void set_context_factory_private( ui::ContextFactoryPrivate* context_factory_private) { context_factory_private_ = context_factory_private; @@ -222,6 +227,8 @@ // creating a different WindowPort implementation. bool in_mus_shutdown_ = false; + bool throttle_input_on_resize_ = true; + DISALLOW_COPY_AND_ASSIGN(Env); };
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc index f83c822..3f26feb1 100644 --- a/ui/aura/mus/window_tree_client.cc +++ b/ui/aura/mus/window_tree_client.cc
@@ -874,7 +874,8 @@ window_manager_client_->SetDisplayRoot( display, display_init_params->viewport_metrics.Clone(), display_init_params->is_primary_display, window->server_id(), - display_init_params->mirrors, + switches::IsMusHostingViz() ? display_init_params->mirrors + : std::vector<display::Display>(), base::Bind(&OnAckMustSucceed, FROM_HERE)); } }
diff --git a/ui/aura/mus/window_tree_host_mus.cc b/ui/aura/mus/window_tree_host_mus.cc index 68a3cd3..1552c67 100644 --- a/ui/aura/mus/window_tree_host_mus.cc +++ b/ui/aura/mus/window_tree_host_mus.cc
@@ -13,6 +13,7 @@ #include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" +#include "ui/aura/window_tree_host_observer.h" #include "ui/base/class_property.h" #include "ui/display/display.h" #include "ui/display/screen.h" @@ -186,6 +187,9 @@ OnAcceleratedWidgetAvailable(widget, GetDisplay().device_scale_factor()); if (was_visible) compositor()->SetVisible(true); + + for (WindowTreeHostObserver& observer : observers()) + observer.OnAcceleratedWidgetOverridden(this); } std::unique_ptr<DisplayInitParams>
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc index f1607dc7..27b2b89 100644 --- a/ui/aura/window_tree_host.cc +++ b/ui/aura/window_tree_host.cc
@@ -420,21 +420,10 @@ dispatcher()->OnCursorMovedToRootLocation(root_location); } -void WindowTreeHost::OnCompositingDidCommit(ui::Compositor* compositor) {} - -void WindowTreeHost::OnCompositingStarted(ui::Compositor* compositor, - base::TimeTicks start_time) { - if (!synchronizing_with_child_on_next_frame_) - return; - synchronizing_with_child_on_next_frame_ = false; - synchronization_start_time_ = base::TimeTicks::Now(); - dispatcher_->HoldPointerMoves(); - holding_pointer_moves_ = true; -} - -void WindowTreeHost::OnCompositingEnded(ui::Compositor* compositor) { +void WindowTreeHost::OnCompositingDidCommit(ui::Compositor* compositor) { if (!holding_pointer_moves_) return; + dispatcher_->ReleasePointerMoves(); holding_pointer_moves_ = false; DCHECK(!synchronization_start_time_.is_null()); @@ -442,11 +431,20 @@ base::TimeTicks::Now() - synchronization_start_time_); } +void WindowTreeHost::OnCompositingStarted(ui::Compositor* compositor, + base::TimeTicks start_time) {} + +void WindowTreeHost::OnCompositingEnded(ui::Compositor* compositor) {} + void WindowTreeHost::OnCompositingLockStateChanged(ui::Compositor* compositor) { } void WindowTreeHost::OnCompositingChildResizing(ui::Compositor* compositor) { - synchronizing_with_child_on_next_frame_ = true; + if (!Env::GetInstance()->throttle_input_on_resize() || holding_pointer_moves_) + return; + synchronization_start_time_ = base::TimeTicks::Now(); + dispatcher_->HoldPointerMoves(); + holding_pointer_moves_ = true; } void WindowTreeHost::OnCompositingShuttingDown(ui::Compositor* compositor) {
diff --git a/ui/aura/window_tree_host.h b/ui/aura/window_tree_host.h index b1925384..b83f6494 100644 --- a/ui/aura/window_tree_host.h +++ b/ui/aura/window_tree_host.h
@@ -252,6 +252,11 @@ void OnDisplayMetricsChanged(const display::Display& display, uint32_t metrics) override; + protected: + const base::ObserverList<WindowTreeHostObserver>& observers() const { + return observers_; + } + private: friend class test::WindowTreeHostTestApi; @@ -297,9 +302,6 @@ gfx::Insets output_surface_padding_in_pixels_; - // Set to true if the next CompositorFrame will block on a new child surface. - bool synchronizing_with_child_on_next_frame_ = false; - // Set to the time the synchronization event began. base::TimeTicks synchronization_start_time_;
diff --git a/ui/aura/window_tree_host_observer.h b/ui/aura/window_tree_host_observer.h index e71455dc..a355be4 100644 --- a/ui/aura/window_tree_host_observer.h +++ b/ui/aura/window_tree_host_observer.h
@@ -29,6 +29,9 @@ // Called when the native window system sends the host request to close. virtual void OnHostCloseRequested(WindowTreeHost* host) {} + // Called when the accelerated widget is overridden for the host. + virtual void OnAcceleratedWidgetOverridden(WindowTreeHost* host) {} + protected: virtual ~WindowTreeHostObserver() {} };
diff --git a/ui/aura/window_tree_host_unittest.cc b/ui/aura/window_tree_host_unittest.cc index 52b9c6f..e1ee4cbc 100644 --- a/ui/aura/window_tree_host_unittest.cc +++ b/ui/aura/window_tree_host_unittest.cc
@@ -78,26 +78,24 @@ } TEST_F(WindowTreeHostTest, HoldPointerMovesOnChildResizing) { - // Signal to the ui::Compositor that a child is resizing. This will - // trigger input throttling on the next BeginFrame. - host()->compositor()->OnChildResizing(); - - // Wait for a CompositorFrame to be submitted. - ui::DrawWaiterForTest::WaitForCompositingStarted(host()->compositor()); aura::WindowEventDispatcher* dispatcher = host()->dispatcher(); aura::test::WindowEventDispatcherTestApi dispatcher_api(dispatcher); - // Pointer moves should be throttled until Viz ACKs. If surface - // synchronization is on, this may happen several BeginFrames later. - // This rate limits further resizing while Viz tries to synchronize - // the visuals of multiple clients. + EXPECT_FALSE(dispatcher_api.HoldingPointerMoves()); + + // Signal to the ui::Compositor that a child is resizing. This will + // immediately trigger input throttling. + host()->compositor()->OnChildResizing(); + + // Pointer moves should be throttled until the next commit. This has the + // effect of prioritizing the resize event above other operations in aura. EXPECT_TRUE(dispatcher_api.HoldingPointerMoves()); - // Wait until Viz ACKs the submitted CompositorFrame. - ui::DrawWaiterForTest::WaitForCompositingEnded(host()->compositor()); + // Wait for a CompositorFrame to be submitted. + ui::DrawWaiterForTest::WaitForCompositingStarted(host()->compositor()); - // Pointer moves should be routed normally after the ACK. + // Pointer moves should be routed normally after commit. EXPECT_FALSE(dispatcher_api.HoldingPointerMoves()); }
diff --git a/ui/events/gesture_detection/gesture_detector.cc b/ui/events/gesture_detection/gesture_detector.cc index 988ae6c9..adb22f5 100644 --- a/ui/events/gesture_detection/gesture_detector.cc +++ b/ui/events/gesture_detection/gesture_detector.cc
@@ -17,11 +17,6 @@ namespace ui { namespace { -// Using a small epsilon when comparing slop distances allows pixel perfect -// slop determination when using fractional DIP coordinates (assuming the slop -// region and DPI scale are reasonably proportioned). -const float kSlopEpsilon = .05f; - // Minimum distance a scroll must have traveled from the last scroll/focal point // to trigger an |OnScroll| callback. const float kScrollEpsilon = .1f; @@ -427,6 +422,12 @@ void GestureDetector::Init(const Config& config) { DCHECK(listener_); + // Using a small epsilon when comparing slop distances allows pixel + // perfect slop determination when using fractional DIP coordinates + // (assuming the slop region and DPI scale are reasonably + // proportioned). + const float kSlopEpsilon = .05f; + const float touch_slop = config.touch_slop + kSlopEpsilon; const float double_tap_touch_slop = touch_slop; const float double_tap_slop = config.double_tap_slop + kSlopEpsilon;
diff --git a/ui/events/gesture_detection/scale_gesture_detector.cc b/ui/events/gesture_detection/scale_gesture_detector.cc index 61eab9f..9eb3636 100644 --- a/ui/events/gesture_detection/scale_gesture_detector.cc +++ b/ui/events/gesture_detection/scale_gesture_detector.cc
@@ -19,11 +19,6 @@ namespace ui { namespace { -// Using a small epsilon when comparing slop distances allows pixel perfect -// slop determination when using fractional DPI coordinates (assuming the slop -// region and DPI scale are reasonably proportioned). -const float kSlopEpsilon = .05f; - const float kScaleFactor = .5f; } // namespace @@ -60,6 +55,13 @@ anchored_scale_mode_(ANCHORED_SCALE_MODE_NONE), event_before_or_above_starting_gesture_event_(false) { DCHECK(listener_); + + // Using a small epsilon when comparing slop distances allows pixel + // perfect slop determination when using fractional DPI coordinates + // (assuming the slop region and DPI scale are reasonably + // proportioned). + const float kSlopEpsilon = .05f; + span_slop_ = config.span_slop + kSlopEpsilon; min_span_ = config.min_scaling_span + kSlopEpsilon; }
diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc index b86b8bf..14cad6f 100644 --- a/ui/message_center/views/notification_view.cc +++ b/ui/message_center/views/notification_view.cc
@@ -85,23 +85,23 @@ return views::CreateSolidSidedBorder(top, left, 0, 0, color); } -// ItemView //////////////////////////////////////////////////////////////////// +// NotificationItemView //////////////////////////////////////////////////////// -// ItemViews are responsible for drawing each list notification item's title and -// message next to each other within a single column. -class ItemView : public views::View { +// NotificationItemViews are responsible for drawing each list notification +// item's title and message next to each other within a single column. +class NotificationItemView : public views::View { public: - explicit ItemView(const NotificationItem& item); - ~ItemView() override; + explicit NotificationItemView(const NotificationItem& item); + ~NotificationItemView() override; // Overridden from views::View: void SetVisible(bool visible) override; private: - DISALLOW_COPY_AND_ASSIGN(ItemView); + DISALLOW_COPY_AND_ASSIGN(NotificationItemView); }; -ItemView::ItemView(const NotificationItem& item) { +NotificationItemView::NotificationItemView(const NotificationItem& item) { SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, gfx::Insets(), kItemTitleToMessagePadding)); @@ -124,10 +124,9 @@ SchedulePaint(); } -ItemView::~ItemView() { -} +NotificationItemView::~NotificationItemView() {} -void ItemView::SetVisible(bool visible) { +void NotificationItemView::SetVisible(bool visible) { views::View::SetVisible(visible); for (int i = 0; i < child_count(); ++i) child_at(i)->SetVisible(visible); @@ -522,7 +521,7 @@ DCHECK(top_view_); for (size_t i = 0; i < items.size() && i < kNotificationMaximumItems; ++i) { - ItemView* item_view = new ItemView(items[i]); + NotificationItemView* item_view = new NotificationItemView(items[i]); item_view->SetBorder(MakeTextBorder(padding, i ? 0 : 4, 0)); item_views_.push_back(item_view); top_view_->AddChildView(item_view);