# This file should almost always be empty. Normally Chromium test expectations
# are only put here temporarily, and moved to
# src/third_party/WebKit/LayoutTests/TestExpectations where they will remain
# until they are rebaselined.
#
#
# If you are landing a Chromium CL that would break webkit layout tests,
# please follow these steps:
#
# 1. Add expected failures to the bottom of this file, and run your CL through
# various *_layout trybots.  Confirm that the trybot results are green (any
# failures are masked by the expectations you added to this file).
#
# 2. BEFORE landing your Chromium CL, land a WebKit CL adding those same
# expected failures to
# src/third_party/WebKit/LayoutTests/TestExpectations . If you are unable to do
# this yourself, please get a WebKit Committer to do it for you, or at least
# coordinate with a current WebKit Gardener to make sure she is aware of the
# pending breakages.
#
# 3. AFTER you have landed the WebKit test_expectations CL, you can land your
# Chromium CL.  Be sure to include your expected failures in this file, so
# that other tip-of-tree Chromium developers will not be disturbed by your
# change.
#
#
# Every time Chromium's "WebKit Gardener" rolls the WebKit DEPS within
# Chromium, he will delete ALL expectations within this file.  (By then, they
# will be redundant, because you already landed those same expectations in
# src/third_party/WebKit/LayoutTests/TestExpectations . Right?)
#
# EVERYTHING BELOW THIS LINE WILL BE DELETED AT EVERY WEBKIT DEPS ROLL

crbug.com/395882 http/tests/security/xss-DENIED-method-with-iframe-proto.html [ Skip ]
