Chromium Code Reviews| Index: third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp |
| diff --git a/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp b/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp |
| index 1ff271cd886a065e9cf9992dc8ca54fc64cecf59..1c11006cfa0907ebca6d078b2d038f3189aad312 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp |
| @@ -7,10 +7,12 @@ |
| #include "bindings/core/v8/PerformanceObserverCallback.h" |
| #include "bindings/core/v8/V8BindingForTesting.h" |
| #include "core/testing/DummyPageHolder.h" |
| +#include "core/testing/NullExecutionContext.h" |
| #include "core/timing/PerformanceBase.h" |
| #include "core/timing/PerformanceLongTaskTiming.h" |
| #include "core/timing/PerformanceObserver.h" |
| #include "core/timing/PerformanceObserverInit.h" |
| +#include "platform/network/ResourceResponse.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace blink { |
| @@ -58,6 +60,15 @@ class PerformanceBaseTest : public ::testing::Test { |
| return PerformanceBase::getNavigationType(type, document); |
| } |
| + static bool allowsTimingRedirect( |
| + const Vector<ResourceResponse>& redirectChain, |
| + const ResourceResponse& finalResponse, |
| + const SecurityOrigin& initiatorSecurityOrigin, |
| + ExecutionContext* context) { |
| + return PerformanceBase::allowsTimingRedirect( |
| + redirectChain, finalResponse, initiatorSecurityOrigin, context); |
| + } |
| + |
| Persistent<TestPerformanceBase> m_base; |
| Persistent<PerformanceObserver> m_observer; |
| std::unique_ptr<DummyPageHolder> m_pageHolder; |
| @@ -144,4 +155,42 @@ TEST_F(PerformanceBaseTest, GetNavigationType) { |
| EXPECT_EQ(returnedType, |
| PerformanceNavigationTiming::NavigationType::Navigate); |
| } |
| + |
| +TEST_F(PerformanceBaseTest, AllowsTimingRedirect) { |
| + // When there are no cross-origin redirects. |
| + AtomicString originDomain = "http://127.0.0.1:8000"; |
| + Vector<ResourceResponse> redirectChain; |
| + KURL url(ParsedURLString, originDomain + "/foo.html"); |
| + ResourceResponse finalResponse; |
| + finalResponse.setURL(url); |
| + ResourceResponse redirectResponse1; |
| + redirectResponse1.setURL(url); |
| + ResourceResponse redirectResponse2; |
| + redirectResponse2.setURL(url); |
| + redirectChain.append(redirectResponse1); |
| + redirectChain.append(redirectResponse2); |
| + RefPtr<SecurityOrigin> securityOrigin = SecurityOrigin::create(url); |
| + NullExecutionContext nullExecutionContext; |
|
panicker
2016/12/07 00:40:52
Nit: Make this a member in PerformanceBaseTest?
In
sunjian
2016/12/07 20:10:32
Done.
|
| + const ExecutionContext* context = &nullExecutionContext; |
| + EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse, |
| + *securityOrigin.get(), |
| + const_cast<ExecutionContext*>(context))); |
| + // When there exist cross-origin redirects. |
| + AtomicString crossOriginDomain = "http://126.0.0.1:8000"; |
| + KURL redirectUrl(ParsedURLString, crossOriginDomain + "/bar.html"); |
| + ResourceResponse redirectResponse3; |
| + redirectResponse3.setURL(redirectUrl); |
| + redirectChain.append(redirectResponse3); |
| + EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse, |
| + *securityOrigin.get(), |
| + const_cast<ExecutionContext*>(context))); |
| + |
| + // When cross-origin redirect opts in. |
| + redirectChain.back().setHTTPHeaderField(HTTPNames::Timing_Allow_Origin, |
| + originDomain); |
| + EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse, |
| + *securityOrigin.get(), |
| + const_cast<ExecutionContext*>(context))); |
| +} |
| + |
| } // namespace blink |