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