forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 2
/
nsDOMNavigationTiming.h
152 lines (131 loc) · 4.56 KB
/
nsDOMNavigationTiming.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsDOMNavigationTiming_h___
#define nsDOMNavigationTiming_h___
#include "nscore.h"
#include "nsCOMPtr.h"
#include "nsCOMArray.h"
#include "mozilla/TimeStamp.h"
#include "nsIURI.h"
class nsDOMNavigationTimingClock;
typedef unsigned long long DOMTimeMilliSec;
typedef double DOMHighResTimeStamp;
typedef unsigned short nsDOMPerformanceNavigationType;
namespace mozilla {
namespace dom {
namespace PerformanceNavigation {
static const nsDOMPerformanceNavigationType TYPE_NAVIGATE = 0;
static const nsDOMPerformanceNavigationType TYPE_RELOAD = 1;
static const nsDOMPerformanceNavigationType TYPE_BACK_FORWARD = 2;
static const nsDOMPerformanceNavigationType TYPE_RESERVED = 255;
}
}
}
class nsDOMNavigationTiming
{
public:
nsDOMNavigationTiming();
NS_INLINE_DECL_REFCOUNTING(nsDOMNavigationTiming)
nsDOMPerformanceNavigationType GetType() const {
return mNavigationType;
}
uint16_t GetRedirectCount();
DOMTimeMilliSec GetRedirectStart();
DOMTimeMilliSec GetRedirectEnd();
DOMTimeMilliSec GetNavigationStart() const {
return mNavigationStart;
}
DOMTimeMilliSec GetUnloadEventStart();
DOMTimeMilliSec GetUnloadEventEnd();
DOMTimeMilliSec GetFetchStart() const {
return mFetchStart;
}
DOMTimeMilliSec GetDomLoading() const {
return mDOMLoading;
}
DOMTimeMilliSec GetDomInteractive() const {
return mDOMInteractive;
}
DOMTimeMilliSec GetDomContentLoadedEventStart() const {
return mDOMContentLoadedEventStart;
}
DOMTimeMilliSec GetDomContentLoadedEventEnd() const {
return mDOMContentLoadedEventEnd;
}
DOMTimeMilliSec GetDomComplete() const {
return mDOMComplete;
}
DOMTimeMilliSec GetLoadEventStart() const {
return mLoadEventStart;
}
DOMTimeMilliSec GetLoadEventEnd() const {
return mLoadEventEnd;
}
void NotifyNavigationStart();
void NotifyFetchStart(nsIURI* aURI, nsDOMPerformanceNavigationType aNavigationType);
void NotifyRedirect(nsIURI* aOldURI, nsIURI* aNewURI);
void NotifyBeforeUnload();
void NotifyUnloadAccepted(nsIURI* aOldURI);
void NotifyUnloadEventStart();
void NotifyUnloadEventEnd();
void NotifyLoadEventStart();
void NotifyLoadEventEnd();
// Document changes state to 'loading' before connecting to timing
void SetDOMLoadingTimeStamp(nsIURI* aURI, mozilla::TimeStamp aValue);
void NotifyDOMLoading(nsIURI* aURI);
void NotifyDOMInteractive(nsIURI* aURI);
void NotifyDOMComplete(nsIURI* aURI);
void NotifyDOMContentLoadedStart(nsIURI* aURI);
void NotifyDOMContentLoadedEnd(nsIURI* aURI);
DOMTimeMilliSec TimeStampToDOM(mozilla::TimeStamp aStamp) const;
DOMTimeMilliSec TimeStampToDOMOrFetchStart(mozilla::TimeStamp aStamp) const;
inline DOMHighResTimeStamp TimeStampToDOMHighRes(mozilla::TimeStamp aStamp)
{
mozilla::TimeDuration duration = aStamp - mNavigationStartTimeStamp;
return duration.ToMilliseconds();
}
private:
nsDOMNavigationTiming(const nsDOMNavigationTiming &){};
~nsDOMNavigationTiming();
void Clear();
bool ReportRedirects();
nsCOMPtr<nsIURI> mUnloadedURI;
nsCOMPtr<nsIURI> mLoadedURI;
nsCOMArray<nsIURI> mRedirects;
typedef enum { NOT_CHECKED,
CHECK_PASSED,
NO_REDIRECTS,
CHECK_FAILED} RedirectCheckState;
RedirectCheckState mRedirectCheck;
int16_t mRedirectCount;
nsDOMPerformanceNavigationType mNavigationType;
DOMTimeMilliSec mNavigationStart;
mozilla::TimeStamp mNavigationStartTimeStamp;
DOMTimeMilliSec DurationFromStart();
DOMTimeMilliSec mFetchStart;
DOMTimeMilliSec mRedirectStart;
DOMTimeMilliSec mRedirectEnd;
DOMTimeMilliSec mBeforeUnloadStart;
DOMTimeMilliSec mUnloadStart;
DOMTimeMilliSec mUnloadEnd;
DOMTimeMilliSec mLoadEventStart;
DOMTimeMilliSec mLoadEventEnd;
DOMTimeMilliSec mDOMLoading;
DOMTimeMilliSec mDOMInteractive;
DOMTimeMilliSec mDOMContentLoadedEventStart;
DOMTimeMilliSec mDOMContentLoadedEventEnd;
DOMTimeMilliSec mDOMComplete;
// Booleans to keep track of what things we've already been notified
// about. We don't update those once we've been notified about them
// once.
bool mLoadEventStartSet : 1;
bool mLoadEventEndSet : 1;
bool mDOMLoadingSet : 1;
bool mDOMInteractiveSet : 1;
bool mDOMContentLoadedEventStartSet : 1;
bool mDOMContentLoadedEventEndSet : 1;
bool mDOMCompleteSet : 1;
};
#endif /* nsDOMNavigationTiming_h___ */