Serialize ResourceResponses using WebKit types
[WebKit-https.git] / Source / WebCore / platform / network / ResourceLoadTiming.h
1 /*
2  * Copyright (C) 2010 Google, Inc. All Rights Reserved.
3  * Copyright (C) 2014 Apple, Inc. All Rights Reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef ResourceLoadTiming_h
28 #define ResourceLoadTiming_h
29
30 namespace WebCore {
31     
32 class ResourceLoadTiming {
33 public:
34     ResourceLoadTiming()
35         : domainLookupStart(-1)
36         , domainLookupEnd(-1)
37         , connectStart(-1)
38         , connectEnd(-1)
39         , requestStart(0)
40         , responseStart(0)
41         , secureConnectionStart(-1)
42     {
43     }
44     
45     ResourceLoadTiming(const ResourceLoadTiming& other)
46         : domainLookupStart(other.domainLookupStart)
47         , domainLookupEnd(other.domainLookupEnd)
48         , connectStart(other.connectStart)
49         , connectEnd(other.connectEnd)
50         , requestStart(other.requestStart)
51         , responseStart(other.responseStart)
52         , secureConnectionStart(other.secureConnectionStart)
53     {
54     }
55     
56     ResourceLoadTiming& operator=(const ResourceLoadTiming& other)
57     {
58         domainLookupStart = other.domainLookupStart;
59         domainLookupEnd = other.domainLookupEnd;
60         connectStart = other.connectStart;
61         connectEnd = other.connectEnd;
62         requestStart = other.requestStart;
63         responseStart = other.responseStart;
64         secureConnectionStart = other.secureConnectionStart;
65         return *this;
66     }
67     
68     bool operator==(const ResourceLoadTiming& other) const
69     {
70         return domainLookupStart == other.domainLookupStart
71             && domainLookupEnd == other.domainLookupEnd
72             && connectStart == other.connectStart
73             && connectEnd == other.connectEnd
74             && requestStart == other.requestStart
75             && responseStart == other.responseStart
76             && secureConnectionStart == other.secureConnectionStart;
77     }
78
79     bool operator!=(const ResourceLoadTiming& other) const
80     {
81         return !(*this == other);
82     }
83
84     template<class Encoder> void encode(Encoder&) const;
85     template<class Decoder> static bool decode(Decoder&, ResourceLoadTiming&);
86
87     // These are millisecond deltas from the navigation start.
88     int domainLookupStart;
89     int domainLookupEnd;
90     int connectStart;
91     int connectEnd;
92     int requestStart;
93     int responseStart;
94     int secureConnectionStart;
95 };
96
97 template<class Encoder>
98 void ResourceLoadTiming::encode(Encoder& encoder) const
99 {
100     encoder << domainLookupStart;
101     encoder << domainLookupEnd;
102     encoder << connectStart;
103     encoder << connectEnd;
104     encoder << requestStart;
105     encoder << responseStart;
106     encoder << secureConnectionStart;
107 }
108
109 template<class Decoder>
110 bool ResourceLoadTiming::decode(Decoder& decoder, ResourceLoadTiming& timing)
111 {
112     return decoder.decode(timing.domainLookupStart)
113         && decoder.decode(timing.domainLookupEnd)
114         && decoder.decode(timing.connectStart)
115         && decoder.decode(timing.connectEnd)
116         && decoder.decode(timing.requestStart)
117         && decoder.decode(timing.responseStart)
118         && decoder.decode(timing.secureConnectionStart);
119 }
120
121 }
122
123 #endif