15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/MutationRecord.h"
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h"
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/NodeList.h"
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/QualifiedName.h"
3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/StaticNodeList.h"
39591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/StdLibExtras.h"
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace {
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ChildListRecord : public MutationRecord {
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
4776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    ChildListRecord(PassRefPtrWillBeRawPtr<Node> target, PassRefPtrWillBeRawPtr<StaticNodeList> added, PassRefPtrWillBeRawPtr<StaticNodeList> removed, PassRefPtrWillBeRawPtr<Node> previousSibling, PassRefPtrWillBeRawPtr<Node> nextSibling)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_target(target)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_addedNodes(added)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_removedNodes(removed)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_previousSibling(previousSibling)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_nextSibling(nextSibling)
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
56d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void trace(Visitor* visitor) OVERRIDE
57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    {
58d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_target);
59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_addedNodes);
60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_removedNodes);
61d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_previousSibling);
62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_nextSibling);
63d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        MutationRecord::trace(visitor);
64d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    }
65d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& type() OVERRIDE;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Node* target() OVERRIDE { return m_target.get(); }
6976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual StaticNodeList* addedNodes() OVERRIDE { return m_addedNodes.get(); }
7076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual StaticNodeList* removedNodes() OVERRIDE { return m_removedNodes.get(); }
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Node* previousSibling() OVERRIDE { return m_previousSibling.get(); }
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Node* nextSibling() OVERRIDE { return m_nextSibling.get(); }
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
74d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<Node> m_target;
7576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    RefPtrWillBeMember<StaticNodeList> m_addedNodes;
7676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    RefPtrWillBeMember<StaticNodeList> m_removedNodes;
77d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<Node> m_previousSibling;
78d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<Node> m_nextSibling;
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class RecordWithEmptyNodeLists : public MutationRecord {
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
83f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    RecordWithEmptyNodeLists(PassRefPtrWillBeRawPtr<Node> target, const String& oldValue)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_target(target)
85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        , m_oldValue(oldValue)
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
89d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void trace(Visitor* visitor) OVERRIDE
90d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    {
91d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_target);
92d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_addedNodes);
93d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        visitor->trace(m_removedNodes);
94d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        MutationRecord::trace(visitor);
95d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    }
96d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)private:
98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual Node* target() OVERRIDE { return m_target.get(); }
99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual String oldValue() OVERRIDE { return m_oldValue; }
10076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual StaticNodeList* addedNodes() OVERRIDE { return lazilyInitializeEmptyNodeList(m_addedNodes); }
10176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual StaticNodeList* removedNodes() OVERRIDE { return lazilyInitializeEmptyNodeList(m_removedNodes); }
102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    static StaticNodeList* lazilyInitializeEmptyNodeList(RefPtrWillBeMember<StaticNodeList>& nodeList)
104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!nodeList)
106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            nodeList = StaticNodeList::createEmpty();
107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return nodeList.get();
108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
110d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<Node> m_target;
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    String m_oldValue;
11276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    RefPtrWillBeMember<StaticNodeList> m_addedNodes;
11376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    RefPtrWillBeMember<StaticNodeList> m_removedNodes;
114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)};
115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class AttributesRecord : public RecordWithEmptyNodeLists {
117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)public:
118f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    AttributesRecord(PassRefPtrWillBeRawPtr<Node> target, const QualifiedName& name, const AtomicString& oldValue)
119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        : RecordWithEmptyNodeLists(target, oldValue)
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_attributeName(name.localName())
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_attributeNamespace(name.namespaceURI())
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& type() OVERRIDE;
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& attributeName() OVERRIDE { return m_attributeName; }
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& attributeNamespace() OVERRIDE { return m_attributeNamespace; }
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AtomicString m_attributeName;
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AtomicString m_attributeNamespace;
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class CharacterDataRecord : public RecordWithEmptyNodeLists {
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
136f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    CharacterDataRecord(PassRefPtrWillBeRawPtr<Node> target, const String& oldValue)
137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        : RecordWithEmptyNodeLists(target, oldValue)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& type() OVERRIDE;
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MutationRecordWithNullOldValue : public MutationRecord {
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
14710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    MutationRecordWithNullOldValue(PassRefPtrWillBeRawPtr<MutationRecord> record)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_record(record)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    virtual void trace(Visitor* visitor) OVERRIDE
15310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    {
15410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        visitor->trace(m_record);
15510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        MutationRecord::trace(visitor);
15610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    }
15710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& type() OVERRIDE { return m_record->type(); }
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Node* target() OVERRIDE { return m_record->target(); }
16176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual StaticNodeList* addedNodes() OVERRIDE { return m_record->addedNodes(); }
16276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual StaticNodeList* removedNodes() OVERRIDE { return m_record->removedNodes(); }
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Node* previousSibling() OVERRIDE { return m_record->previousSibling(); }
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Node* nextSibling() OVERRIDE { return m_record->nextSibling(); }
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& attributeName() OVERRIDE { return m_record->attributeName(); }
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual const AtomicString& attributeNamespace() OVERRIDE { return m_record->attributeNamespace(); }
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual String oldValue() OVERRIDE { return String(); }
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    RefPtrWillBeMember<MutationRecord> m_record;
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& ChildListRecord::type()
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_STATIC_LOCAL(AtomicString, childList, ("childList", AtomicString::ConstructFromLiteral));
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return childList;
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& AttributesRecord::type()
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_STATIC_LOCAL(AtomicString, attributes, ("attributes", AtomicString::ConstructFromLiteral));
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return attributes;
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& CharacterDataRecord::type()
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_STATIC_LOCAL(AtomicString, characterData, ("characterData", AtomicString::ConstructFromLiteral));
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return characterData;
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
19376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)PassRefPtrWillBeRawPtr<MutationRecord> MutationRecord::createChildList(PassRefPtrWillBeRawPtr<Node> target, PassRefPtrWillBeRawPtr<StaticNodeList> added, PassRefPtrWillBeRawPtr<StaticNodeList> removed, PassRefPtrWillBeRawPtr<Node> previousSibling, PassRefPtrWillBeRawPtr<Node> nextSibling)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
19510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    return adoptRefWillBeNoop(new ChildListRecord(target, added, removed, previousSibling, nextSibling));
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
198f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)PassRefPtrWillBeRawPtr<MutationRecord> MutationRecord::createAttributes(PassRefPtrWillBeRawPtr<Node> target, const QualifiedName& name, const AtomicString& oldValue)
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
20010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    return adoptRefWillBeNoop(new AttributesRecord(target, name, oldValue));
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
203f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)PassRefPtrWillBeRawPtr<MutationRecord> MutationRecord::createCharacterData(PassRefPtrWillBeRawPtr<Node> target, const String& oldValue)
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
20510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    return adoptRefWillBeNoop(new CharacterDataRecord(target, oldValue));
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
20810f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtrWillBeRawPtr<MutationRecord> MutationRecord::createWithNullOldValue(PassRefPtrWillBeRawPtr<MutationRecord> record)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
21010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    return adoptRefWillBeNoop(new MutationRecordWithNullOldValue(record));
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)MutationRecord::~MutationRecord()
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
217c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
218