blob: bcfdfa0b5c05cfe24270949effdbaced10cd4cad [file] [log] [blame]
// 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.
#ifndef SynchronousMutationObserver_h
#define SynchronousMutationObserver_h
#include "base/macros.h"
#include "core/CoreExport.h"
#include "platform/LifecycleObserver.h"
namespace blink {
class CharacterData;
class ContainerNode;
class Document;
class NodeWithIndex;
class Text;
// This class is a base class for classes which observe DOM tree mutation
// synchronously. If you want to observe DOM tree mutation asynchronously see
// MutationObserver Web API.
// Note: if you only need to observe Document shutdown,
// DocumentShutdownObserver provides this same functionality more efficiently
// (since it doesn't observe the other events).
//
// TODO(yosin): Following classes should be derived from this class to
// simplify Document class.
// - DragCaret
// - DocumentMarkerController
// - EventHandler
// - FrameCaret
// - InputMethodController
// - SelectionController
// - Range set
// - NodeIterator set
class CORE_EXPORT SynchronousMutationObserver
: public LifecycleObserver<Document, SynchronousMutationObserver> {
public:
// TODO(yosin): We will have following member functions:
// - dataWillBeChanged(const CharacterData&);
// - didMoveTreeToNewDocument(const Node& root);
// - didInsertText(Node*, unsigned offset, unsigned length);
// - didRemoveText(Node*, unsigned offset, unsigned length);
// Called after child nodes changed.
virtual void DidChangeChildren(const ContainerNode&);
// Called after characters in |nodeToBeRemoved| is appended into |mergedNode|.
// |oldLength| holds length of |mergedNode| before merge.
virtual void DidMergeTextNodes(
const Text& merged_node,
const NodeWithIndex& node_to_be_removed_with_index,
unsigned old_length);
// Called just after node tree |root| is moved to new document.
virtual void DidMoveTreeToNewDocument(const Node& root);
// Called when |Text| node is split, next sibling |oldNode| contains
// characters after split point.
virtual void DidSplitTextNode(const Text& old_node);
// Called when |CharacterData| is updated at |offset|, |oldLength| is a
// number of deleted character and |newLength| is a number of added
// characters.
virtual void DidUpdateCharacterData(CharacterData*,
unsigned offset,
unsigned old_length,
unsigned new_length);
// Called before removing container node.
virtual void NodeChildrenWillBeRemoved(ContainerNode&);
// Called before removing node.
virtual void NodeWillBeRemoved(Node&);
// Called when detaching document.
virtual void ContextDestroyed(Document*) {}
protected:
SynchronousMutationObserver();
private:
DISALLOW_COPY_AND_ASSIGN(SynchronousMutationObserver);
};
} // namespace blink
#endif // SynchronousMutationObserver_h