Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Side by Side Diff: third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp

Issue 2647643004: Report nav timing 2 instance as soon as it's requested. (Closed)
Patch Set: moved layout test to external/wpt directory Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/timing/Performance.h" 5 #include "core/timing/Performance.h"
6 6
7 #include "bindings/core/v8/PerformanceObserverCallback.h" 7 #include "bindings/core/v8/PerformanceObserverCallback.h"
8 #include "bindings/core/v8/V8BindingForTesting.h" 8 #include "bindings/core/v8/V8BindingForTesting.h"
9 #include "core/dom/TaskRunnerHelper.h" 9 #include "core/dom/TaskRunnerHelper.h"
10 #include "core/testing/DummyPageHolder.h" 10 #include "core/testing/DummyPageHolder.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 m_pageHolder = DummyPageHolder::create(IntSize(800, 600)); 55 m_pageHolder = DummyPageHolder::create(IntSize(800, 600));
56 m_executionContext = new NullExecutionContext(); 56 m_executionContext = new NullExecutionContext();
57 } 57 }
58 58
59 ExecutionContext* getExecutionContext() { return m_executionContext.get(); } 59 ExecutionContext* getExecutionContext() { return m_executionContext.get(); }
60 60
61 int numPerformanceEntriesInObserver() { 61 int numPerformanceEntriesInObserver() {
62 return m_observer->m_performanceEntries.size(); 62 return m_observer->m_performanceEntries.size();
63 } 63 }
64 64
65 PerformanceNavigationTiming::NavigationType getNavigationType(
66 NavigationType type,
67 Document* document) {
68 return PerformanceBase::getNavigationType(type, document);
69 }
70
71 static bool allowsTimingRedirect( 65 static bool allowsTimingRedirect(
72 const Vector<ResourceResponse>& redirectChain, 66 const Vector<ResourceResponse>& redirectChain,
73 const ResourceResponse& finalResponse, 67 const ResourceResponse& finalResponse,
74 const SecurityOrigin& initiatorSecurityOrigin, 68 const SecurityOrigin& initiatorSecurityOrigin,
75 ExecutionContext* context) { 69 ExecutionContext* context) {
76 return PerformanceBase::allowsTimingRedirect( 70 return PerformanceBase::allowsTimingRedirect(
77 redirectChain, finalResponse, initiatorSecurityOrigin, context); 71 redirectChain, finalResponse, initiatorSecurityOrigin, context);
78 } 72 }
79 73
80 Persistent<TestPerformanceBase> m_base; 74 Persistent<TestPerformanceBase> m_base;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 options.setEntryTypes(entryTypeVec); 132 options.setEntryTypes(entryTypeVec);
139 m_observer->observe(options, exceptionState); 133 m_observer->observe(options, exceptionState);
140 134
141 EXPECT_TRUE(m_base->hasPerformanceObserverFor(PerformanceEntry::LongTask)); 135 EXPECT_TRUE(m_base->hasPerformanceObserverFor(PerformanceEntry::LongTask));
142 // Add a long task entry 136 // Add a long task entry
143 m_base->addLongTaskTiming(1234, 5678, "same-origin", "www.foo.com/bar", "", 137 m_base->addLongTaskTiming(1234, 5678, "same-origin", "www.foo.com/bar", "",
144 ""); 138 "");
145 EXPECT_EQ(1, numPerformanceEntriesInObserver()); // added an entry 139 EXPECT_EQ(1, numPerformanceEntriesInObserver()); // added an entry
146 } 140 }
147 141
148 TEST_F(PerformanceBaseTest, GetNavigationType) {
149 m_pageHolder->page().setVisibilityState(PageVisibilityStatePrerender, false);
150 PerformanceNavigationTiming::NavigationType returnedType =
151 getNavigationType(NavigationTypeBackForward, &m_pageHolder->document());
152 EXPECT_EQ(returnedType,
153 PerformanceNavigationTiming::NavigationType::Prerender);
154
155 m_pageHolder->page().setVisibilityState(PageVisibilityStateHidden, false);
156 returnedType =
157 getNavigationType(NavigationTypeBackForward, &m_pageHolder->document());
158 EXPECT_EQ(returnedType,
159 PerformanceNavigationTiming::NavigationType::BackForward);
160
161 m_pageHolder->page().setVisibilityState(PageVisibilityStateVisible, false);
162 returnedType = getNavigationType(NavigationTypeFormResubmitted,
163 &m_pageHolder->document());
164 EXPECT_EQ(returnedType,
165 PerformanceNavigationTiming::NavigationType::Navigate);
166 }
167
168 TEST_F(PerformanceBaseTest, AllowsTimingRedirect) { 142 TEST_F(PerformanceBaseTest, AllowsTimingRedirect) {
169 // When there are no cross-origin redirects. 143 // When there are no cross-origin redirects.
170 AtomicString originDomain = "http://127.0.0.1:8000"; 144 AtomicString originDomain = "http://127.0.0.1:8000";
171 Vector<ResourceResponse> redirectChain; 145 Vector<ResourceResponse> redirectChain;
172 KURL url(ParsedURLString, originDomain + "/foo.html"); 146 KURL url(ParsedURLString, originDomain + "/foo.html");
173 ResourceResponse finalResponse; 147 ResourceResponse finalResponse;
174 finalResponse.setURL(url);
175 ResourceResponse redirectResponse1; 148 ResourceResponse redirectResponse1;
176 redirectResponse1.setURL(url); 149 redirectResponse1.setURL(url);
177 ResourceResponse redirectResponse2; 150 ResourceResponse redirectResponse2;
178 redirectResponse2.setURL(url); 151 redirectResponse2.setURL(url);
179 redirectChain.push_back(redirectResponse1); 152 redirectChain.push_back(redirectResponse1);
180 redirectChain.push_back(redirectResponse2); 153 redirectChain.push_back(redirectResponse2);
181 RefPtr<SecurityOrigin> securityOrigin = SecurityOrigin::create(url); 154 RefPtr<SecurityOrigin> securityOrigin = SecurityOrigin::create(url);
155 // When finalResponse is an empty object.
156 EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse,
157 *securityOrigin.get(),
158 getExecutionContext()));
159 finalResponse.setURL(url);
182 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse, 160 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse,
183 *securityOrigin.get(), 161 *securityOrigin.get(),
184 getExecutionContext())); 162 getExecutionContext()));
185 // When there exist cross-origin redirects. 163 // When there exist cross-origin redirects.
186 AtomicString crossOriginDomain = "http://126.0.0.1:8000"; 164 AtomicString crossOriginDomain = "http://126.0.0.1:8000";
187 KURL redirectUrl(ParsedURLString, crossOriginDomain + "/bar.html"); 165 KURL redirectUrl(ParsedURLString, crossOriginDomain + "/bar.html");
188 ResourceResponse redirectResponse3; 166 ResourceResponse redirectResponse3;
189 redirectResponse3.setURL(redirectUrl); 167 redirectResponse3.setURL(redirectUrl);
190 redirectChain.push_back(redirectResponse3); 168 redirectChain.push_back(redirectResponse3);
191 EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse, 169 EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse,
192 *securityOrigin.get(), 170 *securityOrigin.get(),
193 getExecutionContext())); 171 getExecutionContext()));
194 172
195 // When cross-origin redirect opts in. 173 // When cross-origin redirect opts in.
196 redirectChain.back().setHTTPHeaderField(HTTPNames::Timing_Allow_Origin, 174 redirectChain.back().setHTTPHeaderField(HTTPNames::Timing_Allow_Origin,
197 originDomain); 175 originDomain);
198 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse, 176 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse,
199 *securityOrigin.get(), 177 *securityOrigin.get(),
200 getExecutionContext())); 178 getExecutionContext()));
201 } 179 }
202 180
203 } // namespace blink 181 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698