18a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen/*
28a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * Copyright (C) 2012 Google Inc. All rights reserved.
38a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen *
48a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * Redistribution and use in source and binary forms, with or without
58a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * modification, are permitted provided that the following conditions are
68a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * met:
78a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen *
88a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen *     * Redistributions of source code must retain the above copyright
98a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * notice, this list of conditions and the following disclaimer.
108a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen *     * Redistributions in binary form must reproduce the above
118a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * copyright notice, this list of conditions and the following disclaimer
128a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * in the documentation and/or other materials provided with the
138a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * distribution.
148a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen *     * Neither the name of Google Inc. nor the names of its
158a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * contributors may be used to endorse or promote products derived from
168a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * this software without specific prior written permission.
178a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen *
188a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
198a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
208a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
218a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
228a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
238a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
248a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
258a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
268a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
288a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen */
308a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
318a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen#ifndef DOMEditor_h
328a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen#define DOMEditor_h
338a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
348a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen#include "platform/heap/Handle.h"
358a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen#include "wtf/text/WTFString.h"
368a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
378a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chennamespace blink {
388a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
398a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenclass Element;
408a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenclass ExceptionState;
418a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenclass InspectorHistory;
428a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenclass Node;
438a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenclass Text;
448a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
458a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chentypedef String ErrorString;
468a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
478a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenclass DOMEditor FINAL : public NoBaseWillBeGarbageCollected<DOMEditor> {
488a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    WTF_MAKE_NONCOPYABLE(DOMEditor);
498a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
508a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenpublic:
518a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    explicit DOMEditor(InspectorHistory*);
528a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
538a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    void trace(Visitor*);
548a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
558a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool insertBefore(Node* parentNode, PassRefPtrWillBeRawPtr<Node>, Node* anchorNode, ExceptionState&);
568a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool removeChild(Node* parentNode, Node*, ExceptionState&);
578a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool setAttribute(Element*, const String& name, const String& value, ExceptionState&);
588a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool removeAttribute(Element*, const String& name, ExceptionState&);
598a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool setOuterHTML(Node*, const String& html, Node** newNode, ExceptionState&);
608a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool replaceWholeText(Text*, const String& text, ExceptionState&);
618a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool replaceChild(Node* parentNode, PassRefPtrWillBeRawPtr<Node> newNode, Node* oldNode, ExceptionState&);
628a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool setNodeValue(Node* parentNode, const String& value, ExceptionState&);
638a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
648a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool insertBefore(Node* parentNode, PassRefPtrWillBeRawPtr<Node>, Node* anchorNode, ErrorString*);
658a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool removeChild(Node* parentNode, Node*, ErrorString*);
668a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool setAttribute(Element*, const String& name, const String& value, ErrorString*);
678a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool removeAttribute(Element*, const String& name, ErrorString*);
688a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool setOuterHTML(Node*, const String& html, Node** newNode, ErrorString*);
698a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    bool replaceWholeText(Text*, const String& text, ErrorString*);
708a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
718a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenprivate:
728a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class DOMAction;
738a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class RemoveChildAction;
748a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class InsertBeforeAction;
758a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class RemoveAttributeAction;
768a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class SetAttributeAction;
778a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class SetOuterHTMLAction;
788a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class ReplaceWholeTextAction;
798a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class ReplaceChildNodeAction;
808a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    class SetNodeValueAction;
818a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
828a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    RawPtrWillBeMember<InspectorHistory> m_history;
838a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen};
848a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
858a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
868a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen} // namespace blink
878a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
888a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen#endif // !defined(DOMEditor_h)
898a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen