// Copyright 2016 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/core/dom/synchronous_mutation_notifier.h"

#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/synchronous_mutation_observer.h"

namespace blink {

SynchronousMutationNotifier::SynchronousMutationNotifier() = default;

void SynchronousMutationNotifier::NotifyChangeChildren(
    const ContainerNode& container) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->DidChangeChildren(container);
  });
}

void SynchronousMutationNotifier::NotifyMergeTextNodes(
    const Text& node,
    const NodeWithIndex& node_to_be_removed_with_index,
    unsigned old_length) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->DidMergeTextNodes(node, node_to_be_removed_with_index,
                                old_length);
  });
}

void SynchronousMutationNotifier::NotifyMoveTreeToNewDocument(
    const Node& root) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->DidMoveTreeToNewDocument(root);
  });
}

void SynchronousMutationNotifier::NotifySplitTextNode(const Text& node) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->DidSplitTextNode(node);
  });
}

void SynchronousMutationNotifier::NotifyUpdateCharacterData(
    CharacterData* character_data,
    unsigned offset,
    unsigned old_length,
    unsigned new_length) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->DidUpdateCharacterData(character_data, offset, old_length,
                                     new_length);
  });
}

void SynchronousMutationNotifier::NotifyNodeChildrenWillBeRemoved(
    ContainerNode& container) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->NodeChildrenWillBeRemoved(container);
  });
}

void SynchronousMutationNotifier::NotifyNodeWillBeRemoved(Node& node) {
  ForEachObserver([&](SynchronousMutationObserver* observer) {
    observer->NodeWillBeRemoved(node);
  });
}

}  // namespace blink
