1 // Copyright 2020 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/layout_shift_attribution.h"
6
7 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
8 #include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h"
9 #include "third_party/blink/renderer/core/dom/node.h"
10 #include "third_party/blink/renderer/core/geometry/dom_rect_read_only.h"
11 #include "third_party/blink/renderer/core/timing/performance.h"
12
13 namespace blink {
14
15 // static
Create(Node * node,DOMRectReadOnly * previous,DOMRectReadOnly * current)16 LayoutShiftAttribution* LayoutShiftAttribution::Create(
17 Node* node,
18 DOMRectReadOnly* previous,
19 DOMRectReadOnly* current) {
20 return MakeGarbageCollected<LayoutShiftAttribution>(node, previous, current);
21 }
22
LayoutShiftAttribution(Node * node,DOMRectReadOnly * previous,DOMRectReadOnly * current)23 LayoutShiftAttribution::LayoutShiftAttribution(Node* node,
24 DOMRectReadOnly* previous,
25 DOMRectReadOnly* current)
26 : node_(node), previous_rect_(previous), current_rect_(current) {}
27
28 LayoutShiftAttribution::~LayoutShiftAttribution() = default;
29
node() const30 Node* LayoutShiftAttribution::node() const {
31 return Performance::CanExposeNode(node_) ? node_ : nullptr;
32 }
33
previousRect() const34 DOMRectReadOnly* LayoutShiftAttribution::previousRect() const {
35 return previous_rect_;
36 }
37
currentRect() const38 DOMRectReadOnly* LayoutShiftAttribution::currentRect() const {
39 return current_rect_;
40 }
41
toJSONForBinding(ScriptState * script_state) const42 ScriptValue LayoutShiftAttribution::toJSONForBinding(
43 ScriptState* script_state) const {
44 V8ObjectBuilder builder(script_state);
45 builder.Add("node", node());
46 builder.Add("previousRect", previous_rect_);
47 builder.Add("currentRect", current_rect_);
48 return builder.GetScriptValue();
49 }
50
Trace(Visitor * visitor) const51 void LayoutShiftAttribution::Trace(Visitor* visitor) const {
52 visitor->Trace(node_);
53 visitor->Trace(previous_rect_);
54 visitor->Trace(current_rect_);
55 ScriptWrappable::Trace(visitor);
56 }
57
58 } // namespace blink
59