1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/core/timing/performance_server_timing.h"
6
7 #include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h"
8 #include "third_party/blink/renderer/platform/loader/fetch/resource_timing_info.h"
9 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
10
11 namespace blink {
12
PerformanceServerTiming(const String & name,double duration,const String & description)13 PerformanceServerTiming::PerformanceServerTiming(const String& name,
14 double duration,
15 const String& description)
16 : name_(name), duration_(duration), description_(description) {}
17
18 PerformanceServerTiming::~PerformanceServerTiming() = default;
19
toJSONForBinding(ScriptState * script_state) const20 ScriptValue PerformanceServerTiming::toJSONForBinding(
21 ScriptState* script_state) const {
22 V8ObjectBuilder builder(script_state);
23 builder.AddString("name", name());
24 builder.AddNumber("duration", duration());
25 builder.AddString("description", description());
26 return builder.GetScriptValue();
27 }
28
29 Vector<mojom::blink::ServerTimingInfoPtr>
ParseServerTimingToMojo(const ResourceTimingInfo & info)30 PerformanceServerTiming::ParseServerTimingToMojo(
31 const ResourceTimingInfo& info) {
32 Vector<mojom::blink::ServerTimingInfoPtr> result;
33 const ResourceResponse& response = info.FinalResponse();
34 std::unique_ptr<ServerTimingHeaderVector> headers = ParseServerTimingHeader(
35 response.HttpHeaderField(http_names::kServerTiming));
36 result.ReserveCapacity(headers->size());
37 for (const auto& header : *headers) {
38 result.emplace_back(mojom::blink::ServerTimingInfo::New(
39 header->Name(), header->Duration(), header->Description()));
40 }
41 return result;
42 }
43
44 HeapVector<Member<PerformanceServerTiming>>
ParseServerTiming(const ResourceTimingInfo & info)45 PerformanceServerTiming::ParseServerTiming(const ResourceTimingInfo& info) {
46 HeapVector<Member<PerformanceServerTiming>> result;
47 const ResourceResponse& response = info.FinalResponse();
48 std::unique_ptr<ServerTimingHeaderVector> headers = ParseServerTimingHeader(
49 response.HttpHeaderField(http_names::kServerTiming));
50 result.ReserveCapacity(headers->size());
51 for (const auto& header : *headers) {
52 result.push_back(MakeGarbageCollected<PerformanceServerTiming>(
53 header->Name(), header->Duration(), header->Description()));
54 }
55 return result;
56 }
57
58 HeapVector<Member<PerformanceServerTiming>>
FromParsedServerTiming(const Vector<mojom::blink::ServerTimingInfoPtr> & entries)59 PerformanceServerTiming::FromParsedServerTiming(
60 const Vector<mojom::blink::ServerTimingInfoPtr>& entries) {
61 HeapVector<Member<PerformanceServerTiming>> result;
62 for (const auto& entry : entries) {
63 result.push_back(MakeGarbageCollected<PerformanceServerTiming>(
64 entry->name, entry->duration, entry->description));
65 }
66 return result;
67 }
68
69 } // namespace blink
70