// Copyright 2018 The Chromium Authors. All rights reserved.
// 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/modules/cookie_store/extendable_cookie_change_event.h"

#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/renderer/modules/cookie_store/cookie_list_item.h"
#include "third_party/blink/renderer/modules/cookie_store/extendable_cookie_change_event_init.h"
#include "third_party/blink/renderer/modules/event_modules.h"
#include "third_party/blink/renderer/modules/service_worker/extendable_event_init.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

namespace blink {

ExtendableCookieChangeEvent::~ExtendableCookieChangeEvent() = default;

const AtomicString& ExtendableCookieChangeEvent::InterfaceName() const {
  return event_interface_names::kExtendableCookieChangeEvent;
}

void ExtendableCookieChangeEvent::Trace(blink::Visitor* visitor) {
  ExtendableEvent::Trace(visitor);
  visitor->Trace(changed_);
  visitor->Trace(deleted_);
}

ExtendableCookieChangeEvent::ExtendableCookieChangeEvent(
    const AtomicString& type,
    HeapVector<Member<CookieListItem>> changed,
    HeapVector<Member<CookieListItem>> deleted,
    WaitUntilObserver* wait_until_observer)
    : ExtendableEvent(type, ExtendableEventInit::Create(), wait_until_observer),
      changed_(std::move(changed)),
      deleted_(std::move(deleted)) {}

ExtendableCookieChangeEvent::ExtendableCookieChangeEvent(
    const AtomicString& type,
    const ExtendableCookieChangeEventInit* initializer)
    : ExtendableEvent(type, initializer) {
  if (initializer->hasChanged())
    changed_ = initializer->changed();
  if (initializer->hasDeleted())
    deleted_ = initializer->deleted();
}

}  // namespace blink
