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

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

Issue 2774543003: Fix PerformanceNavigationTiming accessor behavior after document detach. (Closed)
Patch Set: sync Created 3 years, 8 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
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/PerformanceNavigationTiming.h" 5 #include "core/timing/PerformanceNavigationTiming.h"
6 6
7 #include "bindings/core/v8/V8ObjectBuilder.h" 7 #include "bindings/core/v8/V8ObjectBuilder.h"
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/dom/DocumentTiming.h" 9 #include "core/dom/DocumentTiming.h"
10 #include "core/frame/LocalFrame.h" 10 #include "core/frame/LocalFrame.h"
11 #include "core/loader/DocumentLoadTiming.h" 11 #include "core/loader/DocumentLoadTiming.h"
12 #include "core/loader/DocumentLoader.h" 12 #include "core/loader/DocumentLoader.h"
13 #include "core/timing/PerformanceBase.h" 13 #include "core/timing/PerformanceBase.h"
14 #include "platform/loader/fetch/ResourceTimingInfo.h" 14 #include "platform/loader/fetch/ResourceTimingInfo.h"
15 15
16 namespace blink { 16 namespace blink {
17 17
18 PerformanceNavigationTiming::PerformanceNavigationTiming( 18 PerformanceNavigationTiming::PerformanceNavigationTiming(
19 LocalFrame* frame, 19 LocalFrame* frame,
20 ResourceTimingInfo* info, 20 ResourceTimingInfo* info,
21 double timeOrigin) 21 double timeOrigin)
22 : PerformanceResourceTiming(info ? info->initialURL().getString() : "", 22 : PerformanceResourceTiming(info ? info->initialURL().getString() : "",
23 "navigation", 23 "navigation",
24 0.0, 24 0.0,
25 0.0), 25 0.0),
26 ContextClient(frame),
26 m_timeOrigin(timeOrigin), 27 m_timeOrigin(timeOrigin),
27 m_resourceTimingInfo(info), 28 m_resourceTimingInfo(info) {
28 m_frame(frame) {
29 DCHECK(frame); 29 DCHECK(frame);
30 DCHECK(info); 30 DCHECK(info);
31 } 31 }
32 32
33 PerformanceNavigationTiming::~PerformanceNavigationTiming() {} 33 PerformanceNavigationTiming::~PerformanceNavigationTiming() {}
34 34
35 DEFINE_TRACE(PerformanceNavigationTiming) { 35 DEFINE_TRACE(PerformanceNavigationTiming) {
36 visitor->trace(m_frame); 36 ContextClient::trace(visitor);
37 PerformanceEntry::trace(visitor); 37 PerformanceEntry::trace(visitor);
38 } 38 }
39 39
40 DocumentLoadTiming* PerformanceNavigationTiming::documentLoadTiming() const { 40 DocumentLoadTiming* PerformanceNavigationTiming::documentLoadTiming() const {
41 DocumentLoader* loader = documentLoader(); 41 DocumentLoader* loader = documentLoader();
42 if (!loader) 42 if (!loader)
43 return nullptr; 43 return nullptr;
44 44
45 return &loader->timing(); 45 return &loader->timing();
46 } 46 }
47 47
48 DocumentLoader* PerformanceNavigationTiming::documentLoader() const { 48 DocumentLoader* PerformanceNavigationTiming::documentLoader() const {
49 return m_frame->loader().documentLoader(); 49 if (!frame())
50 return nullptr;
51 return frame()->loader().documentLoader();
50 } 52 }
51 53
52 const DocumentTiming* PerformanceNavigationTiming::documentTiming() const { 54 const DocumentTiming* PerformanceNavigationTiming::documentTiming() const {
53 Document* document = m_frame->document(); 55 if (!frame())
56 return nullptr;
57 Document* document = frame()->document();
54 if (!document) 58 if (!document)
55 return nullptr; 59 return nullptr;
56 60
57 return &document->timing(); 61 return &document->timing();
58 } 62 }
59 63
60 ResourceLoadTiming* PerformanceNavigationTiming::resourceLoadTiming() const { 64 ResourceLoadTiming* PerformanceNavigationTiming::resourceLoadTiming() const {
61 return m_resourceTimingInfo->finalResponse().resourceLoadTiming(); 65 return m_resourceTimingInfo->finalResponse().resourceLoadTiming();
62 } 66 }
63 67
(...skipping 15 matching lines...) Expand all
79 83
80 unsigned long long PerformanceNavigationTiming::getDecodedBodySize() const { 84 unsigned long long PerformanceNavigationTiming::getDecodedBodySize() const {
81 return m_resourceTimingInfo->finalResponse().decodedBodyLength(); 85 return m_resourceTimingInfo->finalResponse().decodedBodyLength();
82 } 86 }
83 87
84 AtomicString PerformanceNavigationTiming::initiatorType() const { 88 AtomicString PerformanceNavigationTiming::initiatorType() const {
85 return "navigation"; 89 return "navigation";
86 } 90 }
87 91
88 bool PerformanceNavigationTiming::getAllowRedirectDetails() const { 92 bool PerformanceNavigationTiming::getAllowRedirectDetails() const {
89 ExecutionContext* context = m_frame->document(); 93 ExecutionContext* context = frame() ? frame()->document() : nullptr;
90 SecurityOrigin* securityOrigin = nullptr; 94 SecurityOrigin* securityOrigin = nullptr;
91 if (context) 95 if (context)
92 securityOrigin = context->getSecurityOrigin(); 96 securityOrigin = context->getSecurityOrigin();
93 if (!securityOrigin) 97 if (!securityOrigin)
94 return false; 98 return false;
95 // TODO(sunjian): Think about how to make this flag deterministic. 99 // TODO(sunjian): Think about how to make this flag deterministic.
96 // crbug/693183. 100 // crbug/693183.
97 return PerformanceBase::allowsTimingRedirect( 101 return PerformanceBase::allowsTimingRedirect(
98 m_resourceTimingInfo->redirectChain(), 102 m_resourceTimingInfo->redirectChain(),
99 m_resourceTimingInfo->finalResponse(), *securityOrigin, context); 103 m_resourceTimingInfo->finalResponse(), *securityOrigin, context);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 DOMHighResTimeStamp PerformanceNavigationTiming::loadEventEnd() const { 170 DOMHighResTimeStamp PerformanceNavigationTiming::loadEventEnd() const {
167 DocumentLoadTiming* timing = documentLoadTiming(); 171 DocumentLoadTiming* timing = documentLoadTiming();
168 if (!timing) 172 if (!timing)
169 return 0.0; 173 return 0.0;
170 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 174 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
171 m_timeOrigin, timing->loadEventEnd()); 175 m_timeOrigin, timing->loadEventEnd());
172 } 176 }
173 177
174 AtomicString PerformanceNavigationTiming::type() const { 178 AtomicString PerformanceNavigationTiming::type() const {
175 DocumentLoader* loader = documentLoader(); 179 DocumentLoader* loader = documentLoader();
176 DCHECK(loader); 180 if (!loader)
177 Document* document = m_frame->document(); 181 return "navigate";
182 Document* document = frame() ? frame()->document(): nullptr;
178 switch (PerformanceBase::getNavigationType(loader->getNavigationType(), 183 switch (PerformanceBase::getNavigationType(loader->getNavigationType(),
179 document)) { 184 document)) {
180 case NavigationType::Prerender: 185 case NavigationType::Prerender:
181 return "prerender"; 186 return "prerender";
182 case NavigationType::Reload: 187 case NavigationType::Reload:
183 return "reload"; 188 return "reload";
184 case NavigationType::BackForward: 189 case NavigationType::BackForward:
185 return "back_forward"; 190 return "back_forward";
186 case NavigationType::Navigate: 191 case NavigationType::Navigate:
187 return "navigate"; 192 return "navigate";
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 builder.addNumber("domInteractive", domInteractive()); 250 builder.addNumber("domInteractive", domInteractive());
246 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart()); 251 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart());
247 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd()); 252 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd());
248 builder.addNumber("domComplete", domComplete()); 253 builder.addNumber("domComplete", domComplete());
249 builder.addNumber("loadEventStart", loadEventStart()); 254 builder.addNumber("loadEventStart", loadEventStart());
250 builder.addNumber("loadEventEnd", loadEventEnd()); 255 builder.addNumber("loadEventEnd", loadEventEnd());
251 builder.addString("type", type()); 256 builder.addString("type", type());
252 builder.addNumber("redirectCount", redirectCount()); 257 builder.addNumber("redirectCount", redirectCount());
253 } 258 }
254 } 259 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698