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

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: add TODO 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
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) { 142 TEST_F(PerformanceBaseTest, GetNavigationType) {
149 m_pageHolder->page().setVisibilityState(PageVisibilityStatePrerender, false); 143 m_pageHolder->page().setVisibilityState(PageVisibilityStatePrerender, false);
150 PerformanceNavigationTiming::NavigationType returnedType = 144 PerformanceNavigationTiming::NavigationType returnedType =
151 getNavigationType(NavigationTypeBackForward, &m_pageHolder->document()); 145 PerformanceBase::getNavigationType(NavigationTypeBackForward,
146 &m_pageHolder->document());
152 EXPECT_EQ(returnedType, 147 EXPECT_EQ(returnedType,
153 PerformanceNavigationTiming::NavigationType::Prerender); 148 PerformanceNavigationTiming::NavigationType::Prerender);
154 149
155 m_pageHolder->page().setVisibilityState(PageVisibilityStateHidden, false); 150 m_pageHolder->page().setVisibilityState(PageVisibilityStateHidden, false);
156 returnedType = 151 returnedType = PerformanceBase::getNavigationType(NavigationTypeBackForward,
157 getNavigationType(NavigationTypeBackForward, &m_pageHolder->document()); 152 &m_pageHolder->document());
158 EXPECT_EQ(returnedType, 153 EXPECT_EQ(returnedType,
159 PerformanceNavigationTiming::NavigationType::BackForward); 154 PerformanceNavigationTiming::NavigationType::BackForward);
160 155
161 m_pageHolder->page().setVisibilityState(PageVisibilityStateVisible, false); 156 m_pageHolder->page().setVisibilityState(PageVisibilityStateVisible, false);
162 returnedType = getNavigationType(NavigationTypeFormResubmitted, 157 returnedType = PerformanceBase::getNavigationType(
163 &m_pageHolder->document()); 158 NavigationTypeFormResubmitted, &m_pageHolder->document());
164 EXPECT_EQ(returnedType, 159 EXPECT_EQ(returnedType,
165 PerformanceNavigationTiming::NavigationType::Navigate); 160 PerformanceNavigationTiming::NavigationType::Navigate);
166 } 161 }
167 162
168 TEST_F(PerformanceBaseTest, AllowsTimingRedirect) { 163 TEST_F(PerformanceBaseTest, AllowsTimingRedirect) {
169 // When there are no cross-origin redirects. 164 // When there are no cross-origin redirects.
170 AtomicString originDomain = "http://127.0.0.1:8000"; 165 AtomicString originDomain = "http://127.0.0.1:8000";
171 Vector<ResourceResponse> redirectChain; 166 Vector<ResourceResponse> redirectChain;
172 KURL url(ParsedURLString, originDomain + "/foo.html"); 167 KURL url(ParsedURLString, originDomain + "/foo.html");
173 ResourceResponse finalResponse; 168 ResourceResponse finalResponse;
174 finalResponse.setURL(url);
175 ResourceResponse redirectResponse1; 169 ResourceResponse redirectResponse1;
176 redirectResponse1.setURL(url); 170 redirectResponse1.setURL(url);
177 ResourceResponse redirectResponse2; 171 ResourceResponse redirectResponse2;
178 redirectResponse2.setURL(url); 172 redirectResponse2.setURL(url);
179 redirectChain.push_back(redirectResponse1); 173 redirectChain.push_back(redirectResponse1);
180 redirectChain.push_back(redirectResponse2); 174 redirectChain.push_back(redirectResponse2);
181 RefPtr<SecurityOrigin> securityOrigin = SecurityOrigin::create(url); 175 RefPtr<SecurityOrigin> securityOrigin = SecurityOrigin::create(url);
176 // When finalResponse is an empty object.
177 EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse,
178 *securityOrigin.get(),
179 getExecutionContext()));
180 finalResponse.setURL(url);
182 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse, 181 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse,
183 *securityOrigin.get(), 182 *securityOrigin.get(),
184 getExecutionContext())); 183 getExecutionContext()));
185 // When there exist cross-origin redirects. 184 // When there exist cross-origin redirects.
186 AtomicString crossOriginDomain = "http://126.0.0.1:8000"; 185 AtomicString crossOriginDomain = "http://126.0.0.1:8000";
187 KURL redirectUrl(ParsedURLString, crossOriginDomain + "/bar.html"); 186 KURL redirectUrl(ParsedURLString, crossOriginDomain + "/bar.html");
188 ResourceResponse redirectResponse3; 187 ResourceResponse redirectResponse3;
189 redirectResponse3.setURL(redirectUrl); 188 redirectResponse3.setURL(redirectUrl);
190 redirectChain.push_back(redirectResponse3); 189 redirectChain.push_back(redirectResponse3);
191 EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse, 190 EXPECT_FALSE(allowsTimingRedirect(redirectChain, finalResponse,
192 *securityOrigin.get(), 191 *securityOrigin.get(),
193 getExecutionContext())); 192 getExecutionContext()));
194 193
195 // When cross-origin redirect opts in. 194 // When cross-origin redirect opts in.
196 redirectChain.back().setHTTPHeaderField(HTTPNames::Timing_Allow_Origin, 195 redirectChain.back().setHTTPHeaderField(HTTPNames::Timing_Allow_Origin,
197 originDomain); 196 originDomain);
198 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse, 197 EXPECT_TRUE(allowsTimingRedirect(redirectChain, finalResponse,
199 *securityOrigin.get(), 198 *securityOrigin.get(),
200 getExecutionContext())); 199 getExecutionContext()));
201 } 200 }
202 201
203 } // namespace blink 202 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceBase.cpp ('k') | third_party/WebKit/Source/core/timing/PerformanceEntry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698