15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 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" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/DOMEditor.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionStatePlaceholder.h" 36591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "core/dom/DOMException.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Text.h" 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/editing/markup.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/DOMPatchSupport.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorHistory.h" 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefPtr.h" 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::RemoveChildAction FINAL : public InspectorHistory::Action { 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(RemoveChildAction); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RemoveChildAction(Node* parentNode, Node* node) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("RemoveChild") 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_parentNode(parentNode) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_node(node) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_anchorNode = m_node->nextSibling(); 6051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return redo(exceptionState); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState& exceptionState) OVERRIDE 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_parentNode->insertBefore(m_node.get(), m_anchorNode.get(), exceptionState); 6651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState& exceptionState) OVERRIDE 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_parentNode->removeChild(m_node.get(), exceptionState); 7251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_parentNode); 785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_node); 795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_anchorNode); 805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_parentNode; 855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_node; 865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_anchorNode; 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::InsertBeforeAction FINAL : public InspectorHistory::Action { 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(InsertBeforeAction); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 92f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) InsertBeforeAction(Node* parentNode, PassRefPtrWillBeRawPtr<Node> node, Node* anchorNode) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("InsertBefore") 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_parentNode(parentNode) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_node(node) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_anchorNode(anchorNode) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_node->parentNode()) { 1035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_removeChildAction = adoptRefWillBeNoop(new RemoveChildAction(m_node->parentNode(), m_node.get())); 10451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!m_removeChildAction->perform(exceptionState)) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_parentNode->insertBefore(m_node.get(), m_anchorNode.get(), exceptionState); 10851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState& exceptionState) OVERRIDE 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_parentNode->removeChild(m_node.get(), exceptionState); 11451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_removeChildAction) 11751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return m_removeChildAction->undo(exceptionState); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState& exceptionState) OVERRIDE 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_removeChildAction && !m_removeChildAction->redo(exceptionState)) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_parentNode->insertBefore(m_node.get(), m_anchorNode.get(), exceptionState); 12651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 1305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 1315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_parentNode); 1325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_node); 1335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_anchorNode); 1345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_removeChildAction); 1355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 1365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 1375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_parentNode; 1405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_node; 1415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_anchorNode; 1425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<RemoveChildAction> m_removeChildAction; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::RemoveAttributeAction FINAL : public InspectorHistory::Action { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(RemoveAttributeAction); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) RemoveAttributeAction(Element* element, const AtomicString& name) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("RemoveAttribute") 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_element(element) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_name(name) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value = m_element->getAttribute(m_name); 15851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return redo(exceptionState); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState& exceptionState) OVERRIDE 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_element->setAttribute(m_name, m_value, exceptionState); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState&) OVERRIDE 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_element->removeAttribute(m_name); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 1745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 1755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_element); 1765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 1775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 1785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Element> m_element; 181a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString m_name; 182a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString m_value; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::SetAttributeAction FINAL : public InspectorHistory::Action { 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(SetAttributeAction); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 188a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) SetAttributeAction(Element* element, const AtomicString& name, const AtomicString& value) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("SetAttribute") 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_element(element) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_name(name) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_value(value) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hadAttribute(false) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 199d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) const AtomicString& value = m_element->getAttribute(m_name); 200d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_hadAttribute = !value.isNull(); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hadAttribute) 202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_oldValue = value; 20351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return redo(exceptionState); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState& exceptionState) OVERRIDE 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hadAttribute) 20951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_element->setAttribute(m_name, m_oldValue, exceptionState); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_element->removeAttribute(m_name); 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState& exceptionState) OVERRIDE 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 21751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_element->setAttribute(m_name, m_value, exceptionState); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 2225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 2235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_element); 2245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 2255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 2265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Element> m_element; 229a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString m_name; 230a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString m_value; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_hadAttribute; 232a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString m_oldValue; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::SetOuterHTMLAction FINAL : public InspectorHistory::Action { 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(SetOuterHTMLAction); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SetOuterHTMLAction(Node* node, const String& html) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("SetOuterHTML") 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_node(node) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_nextSibling(node->nextSibling()) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_html(html) 2435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) , m_newNode(nullptr) 2445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) , m_history(adoptPtrWillBeNoop(new InspectorHistory())) 2455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) , m_domEditor(adoptPtrWillBeNoop(new DOMEditor(m_history.get()))) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_oldHTML = createMarkup(m_node.get()); 2528abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) ASSERT(m_node->ownerDocument()); 2538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) DOMPatchSupport domPatchSupport(m_domEditor.get(), *m_node->ownerDocument()); 25451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_newNode = domPatchSupport.patchNode(m_node.get(), m_html, exceptionState); 25551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState& exceptionState) OVERRIDE 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 26051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return m_history->undo(exceptionState); 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState& exceptionState) OVERRIDE 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 26551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return m_history->redo(exceptionState); 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* newNode() 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_newNode; 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 2745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 2755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_node); 2765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_nextSibling); 2775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_newNode); 2785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_history); 2795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_domEditor); 2805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 2815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 2825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_node; 2855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_nextSibling; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_html; 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_oldHTML; 2885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RawPtrWillBeMember<Node> m_newNode; 2895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) OwnPtrWillBeMember<InspectorHistory> m_history; 2905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) OwnPtrWillBeMember<DOMEditor> m_domEditor; 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::ReplaceWholeTextAction FINAL : public InspectorHistory::Action { 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(ReplaceWholeTextAction); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ReplaceWholeTextAction(Text* textNode, const String& text) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("ReplaceWholeText") 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_textNode(textNode) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_text(text) 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_oldText = m_textNode->wholeText(); 30651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return redo(exceptionState); 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState&) OVERRIDE 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 311e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) m_textNode->replaceWholeText(m_oldText); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState&) OVERRIDE 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 317e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) m_textNode->replaceWholeText(m_text); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 3225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 3235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_textNode); 3245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 3255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 3265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Text> m_textNode; 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_text; 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_oldText; 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::ReplaceChildNodeAction FINAL : public InspectorHistory::Action { 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(ReplaceChildNodeAction); 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 336f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ReplaceChildNodeAction(Node* parentNode, PassRefPtrWillBeRawPtr<Node> newNode, Node* oldNode) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("ReplaceChildNode") 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_parentNode(parentNode) 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_newNode(newNode) 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_oldNode(oldNode) 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState& exceptionState) OVERRIDE 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 34651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return redo(exceptionState); 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState& exceptionState) OVERRIDE 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_parentNode->replaceChild(m_oldNode, m_newNode.get(), exceptionState); 35251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState& exceptionState) OVERRIDE 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_parentNode->replaceChild(m_newNode, m_oldNode.get(), exceptionState); 35851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 3625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 3635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_parentNode); 3645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_newNode); 3655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_oldNode); 3665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 3675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 3685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_parentNode; 3715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_newNode; 3725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_oldNode; 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMEditor::SetNodeValueAction FINAL : public InspectorHistory::Action { 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(SetNodeValueAction); 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SetNodeValueAction(Node* node, const String& value) 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InspectorHistory::Action("SetNodeValue") 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_node(node) 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_value(value) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool perform(ExceptionState&) OVERRIDE 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_oldValue = m_node->nodeValue(); 3881fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch return redo(IGNORE_EXCEPTION); 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool undo(ExceptionState&) OVERRIDE 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 393e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch m_node->setNodeValue(m_oldValue); 394e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return true; 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool redo(ExceptionState&) OVERRIDE 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 399e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch m_node->setNodeValue(m_value); 400e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return true; 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor* visitor) OVERRIDE 4045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 4055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_node); 4065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorHistory::Action::trace(visitor); 4075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 4085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 4105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<Node> m_node; 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_value; 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_oldValue; 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DOMEditor::DOMEditor(InspectorHistory* history) : m_history(history) { } 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 417f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)bool DOMEditor::insertBefore(Node* parentNode, PassRefPtrWillBeRawPtr<Node> node, Node* anchorNode, ExceptionState& exceptionState) 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new InsertBeforeAction(parentNode, node, anchorNode)), exceptionState); 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool DOMEditor::removeChild(Node* parentNode, Node* node, ExceptionState& exceptionState) 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new RemoveChildAction(parentNode, node)), exceptionState); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool DOMEditor::setAttribute(Element* element, const String& name, const String& value, ExceptionState& exceptionState) 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new SetAttributeAction(element, AtomicString(name), AtomicString(value))), exceptionState); 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool DOMEditor::removeAttribute(Element* element, const String& name, ExceptionState& exceptionState) 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new RemoveAttributeAction(element, AtomicString(name))), exceptionState); 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool DOMEditor::setOuterHTML(Node* node, const String& html, Node** newNode, ExceptionState& exceptionState) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<SetOuterHTMLAction> action = adoptRefWillBeNoop(new SetOuterHTMLAction(node, html)); 44007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool result = m_history->perform(action, exceptionState); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (result) 44207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch *newNode = action->newNode(); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool DOMEditor::replaceWholeText(Text* textNode, const String& text, ExceptionState& exceptionState) 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new ReplaceWholeTextAction(textNode, text)), exceptionState); 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 451f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)bool DOMEditor::replaceChild(Node* parentNode, PassRefPtrWillBeRawPtr<Node> newNode, Node* oldNode, ExceptionState& exceptionState) 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new ReplaceChildNodeAction(parentNode, newNode, oldNode)), exceptionState); 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool DOMEditor::setNodeValue(Node* node, const String& value, ExceptionState& exceptionState) 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return m_history->perform(adoptRefWillBeNoop(new SetNodeValueAction(node, value)), exceptionState); 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static void populateErrorString(ExceptionState& exceptionState, ErrorString* errorString) 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 46351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 46451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) *errorString = DOMException::getErrorName(exceptionState.code()); 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 467f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)bool DOMEditor::insertBefore(Node* parentNode, PassRefPtrWillBeRawPtr<Node> node, Node* anchorNode, ErrorString* errorString) 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 46951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 47051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool result = insertBefore(parentNode, node, anchorNode, exceptionState); 47151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) populateErrorString(exceptionState, errorString); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMEditor::removeChild(Node* parentNode, Node* node, ErrorString* errorString) 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 47751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 47851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool result = removeChild(parentNode, node, exceptionState); 47951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) populateErrorString(exceptionState, errorString); 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMEditor::setAttribute(Element* element, const String& name, const String& value, ErrorString* errorString) 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 48551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 48651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool result = setAttribute(element, name, value, exceptionState); 48751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) populateErrorString(exceptionState, errorString); 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMEditor::removeAttribute(Element* element, const String& name, ErrorString* errorString) 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 49351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 49451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool result = removeAttribute(element, name, exceptionState); 49551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) populateErrorString(exceptionState, errorString); 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMEditor::setOuterHTML(Node* node, const String& html, Node** newNode, ErrorString* errorString) 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 50151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 50251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool result = setOuterHTML(node, html, newNode, exceptionState); 50351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) populateErrorString(exceptionState, errorString); 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMEditor::replaceWholeText(Text* textNode, const String& text, ErrorString* errorString) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 50951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 51051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool result = replaceWholeText(textNode, text, exceptionState); 51151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) populateErrorString(exceptionState, errorString); 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void DOMEditor::trace(Visitor* visitor) 5165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 5175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_history); 5185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 5195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 520c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 522