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
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/events/toggle_event.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_toggle_event_init.h"
#include "third_party/blink/renderer/core/dom/element.h"
#include "third_party/blink/renderer/core/dom/events/event.h"
#include "third_party/blink/renderer/core/dom/events/event_target.h"
#include "third_party/blink/renderer/core/event_interface_names.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
namespace blink {
ToggleEvent::ToggleEvent() = default;
ToggleEvent::ToggleEvent(const AtomicString& type,
Event::Cancelable cancelable,
const String& old_state,
const String& new_state,
Element* source)
: Event(type, Bubbles::kNo, cancelable),
old_state_(old_state),
new_state_(new_state),
source_(source) {
if (!RuntimeEnabledFeatures::ToggleEventSourceEnabled()) {
source_ = nullptr;
}
DCHECK(old_state == "closed" || old_state == "open")
<< " old_state should be \"closed\" or \"open\". Was: " << old_state;
DCHECK(new_state == "closed" || new_state == "open")
<< " new_state should be \"closed\" or \"open\". Was: " << new_state;
}
ToggleEvent::ToggleEvent(const AtomicString& type,
const ToggleEventInit* initializer)
: Event(type, initializer) {
if (initializer->hasOldState()) {
old_state_ = initializer->oldState();
}
if (initializer->hasNewState()) {
new_state_ = initializer->newState();
}
}
ToggleEvent::~ToggleEvent() = default;
const String& ToggleEvent::oldState() const {
return old_state_;
}
const String& ToggleEvent::newState() const {
return new_state_;
}
Element* ToggleEvent::source() const {
CHECK(RuntimeEnabledFeatures::ToggleEventSourceEnabled());
if (source_ && currentTarget()) {
return ¤tTarget()->ToNode()->GetTreeScope().Retarget(*source_);
}
return source_;
}
const AtomicString& ToggleEvent::InterfaceName() const {
return event_interface_names::kToggleEvent;
}
void ToggleEvent::Trace(Visitor* visitor) const {
Event::Trace(visitor);
visitor->Trace(source_);
}
} // namespace blink
|