Changeset 104586 in webkit


Ignore:
Timestamp:
Jan 10, 2012 9:01:05 AM (12 years ago)
Author:
pfeldman@chromium.org
Message:

Web Inspector: add "free flow DOM editing" experiment.
https://bugs.webkit.org/show_bug.cgi?id=75955

This change enables HTML editing from Resources panel experiment.

Reviewed by Yury Semikhatsky.

  • CMakeLists.txt:
  • English.lproj/localizedStrings.js:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • inspector/DOMEditor.cpp: Added.

(WebCore::DOMEditor::DOMEditor):
(WebCore::DOMEditor::~DOMEditor):
(WebCore::DOMEditor::patch):
(WebCore::DOMEditor::NodeDigest::NodeDigest):
(WebCore::DOMEditor::patchElement):
(WebCore::DOMEditor::patchNode):
(WebCore::DOMEditor::patchChildren):
(WebCore::addStringToSHA1):
(WebCore::DOMEditor::createNodeDigest):

  • inspector/DOMEditor.h: Added.
  • inspector/InspectorDOMAgent.cpp:

(WebCore::InspectorDOMAgent::setOuterHTML):

  • inspector/front-end/DOMAgent.js:

(WebInspector.DOMAgent):
(WebInspector.DOMModelResourceBinding):
(WebInspector.DOMModelResourceBinding.prototype.setContent):
(WebInspector.DOMModelResourceBinding.prototype.canSetContent):

  • inspector/front-end/Settings.js:

(WebInspector.ExperimentsSettings):

Location:
trunk/Source/WebCore
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r104532 r104586  
    871871    inspector/ConsoleMessage.cpp
    872872    inspector/ContentSearchUtils.cpp
     873    inspector/DOMEditor.cpp
    873874    inspector/DOMNodeHighlighter.cpp
    874875    inspector/IdentifiersFactory.cpp
  • trunk/Source/WebCore/ChangeLog

    r104585 r104586  
     12012-01-10  Pavel Feldman  <pfeldman@google.com>
     2
     3        Web Inspector: add "free flow DOM editing" experiment.
     4        https://bugs.webkit.org/show_bug.cgi?id=75955
     5
     6        This change enables HTML editing from Resources panel experiment.
     7
     8        Reviewed by Yury Semikhatsky.
     9
     10        * CMakeLists.txt:
     11        * English.lproj/localizedStrings.js:
     12        * GNUmakefile.list.am:
     13        * Target.pri:
     14        * WebCore.gypi:
     15        * WebCore.vcproj/WebCore.vcproj:
     16        * WebCore.xcodeproj/project.pbxproj:
     17        * inspector/DOMEditor.cpp: Added.
     18        (WebCore::DOMEditor::DOMEditor):
     19        (WebCore::DOMEditor::~DOMEditor):
     20        (WebCore::DOMEditor::patch):
     21        (WebCore::DOMEditor::NodeDigest::NodeDigest):
     22        (WebCore::DOMEditor::patchElement):
     23        (WebCore::DOMEditor::patchNode):
     24        (WebCore::DOMEditor::patchChildren):
     25        (WebCore::addStringToSHA1):
     26        (WebCore::DOMEditor::createNodeDigest):
     27        * inspector/DOMEditor.h: Added.
     28        * inspector/InspectorDOMAgent.cpp:
     29        (WebCore::InspectorDOMAgent::setOuterHTML):
     30        * inspector/front-end/DOMAgent.js:
     31        (WebInspector.DOMAgent):
     32        (WebInspector.DOMModelResourceBinding):
     33        (WebInspector.DOMModelResourceBinding.prototype.setContent):
     34        (WebInspector.DOMModelResourceBinding.prototype.canSetContent):
     35        * inspector/front-end/Settings.js:
     36        (WebInspector.ExperimentsSettings):
     37
    1382012-01-10  Stephen Chenney  <schenney@chromium.org>
    239
  • trunk/Source/WebCore/GNUmakefile.list.am

    r104528 r104586  
    23282328        Source/WebCore/inspector/ContentSearchUtils.cpp \
    23292329        Source/WebCore/inspector/ContentSearchUtils.h \
     2330        Source/WebCore/inspector/DOMEditor.cpp \
     2331        Source/WebCore/inspector/DOMEditor.h \
    23302332        Source/WebCore/inspector/DOMNodeHighlighter.cpp \
    23312333        Source/WebCore/inspector/DOMNodeHighlighter.h \
  • trunk/Source/WebCore/Target.pri

    r104528 r104586  
    850850    inspector/ConsoleMessage.cpp \
    851851    inspector/ContentSearchUtils.cpp \
     852    inspector/DOMEditor.cpp \
    852853    inspector/DOMNodeHighlighter.cpp \
    853854    inspector/IdentifiersFactory.cpp \
     
    19081909    inspector/ConsoleMessage.h \
    19091910    inspector/ContentSearchUtils.h \
     1911    inspector/DOMEditor.h \
    19101912    inspector/DOMNodeHighlighter.h \
    19111913    inspector/DOMWrapperVisitor.h \
  • trunk/Source/WebCore/WebCore.gypi

    r104566 r104586  
    27312731            'inspector/ContentSearchUtils.cpp',
    27322732            'inspector/ContentSearchUtils.h',
     2733            'inspector/DOMEditor.cpp',
     2734            'inspector/DOMEditor.h',
    27332735            'inspector/DOMNodeHighlighter.cpp',
    27342736            'inspector/DOMNodeHighlighter.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r104528 r104586  
    7113171131                        </File>
    7113271132                        <File
     71133                                RelativePath="..\inspector\DOMEditor.cpp"
     71134                                >
     71135                        </File>
     71136                        <File
     71137                                RelativePath="..\inspector\DOMEditor.h"
     71138                                >
     71139                        </File>
     71140                        <File
    7113371141                                RelativePath="..\inspector\DOMNodeHighlighter.cpp"
    7113471142                                >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r104528 r104586  
    18531853                7AA51DD5148506A900AD2752 /* InspectorMemoryAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA51DD3148506A900AD2752 /* InspectorMemoryAgent.cpp */; };
    18541854                7AA51DD6148506A900AD2752 /* InspectorMemoryAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AA51DD4148506A900AD2752 /* InspectorMemoryAgent.h */; };
     1855                7AABA25914BC613300AA9A11 /* DOMEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AABA25714BC613300AA9A11 /* DOMEditor.cpp */; };
     1856                7AABA25A14BC613300AA9A11 /* DOMEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AABA25814BC613300AA9A11 /* DOMEditor.h */; };
    18551857                7AB0B1C01211A62200A76940 /* InspectorDatabaseAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AB0B1BE1211A62200A76940 /* InspectorDatabaseAgent.cpp */; };
    18561858                7AB0B1C11211A62200A76940 /* InspectorDatabaseAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB0B1BF1211A62200A76940 /* InspectorDatabaseAgent.h */; };
     
    91639165                7AA51DD3148506A900AD2752 /* InspectorMemoryAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorMemoryAgent.cpp; sourceTree = "<group>"; };
    91649166                7AA51DD4148506A900AD2752 /* InspectorMemoryAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorMemoryAgent.h; sourceTree = "<group>"; };
     9167                7AABA25714BC613300AA9A11 /* DOMEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMEditor.cpp; sourceTree = "<group>"; };
     9168                7AABA25814BC613300AA9A11 /* DOMEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMEditor.h; sourceTree = "<group>"; };
    91659169                7AB0B1BE1211A62200A76940 /* InspectorDatabaseAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDatabaseAgent.cpp; sourceTree = "<group>"; };
    91669170                7AB0B1BF1211A62200A76940 /* InspectorDatabaseAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDatabaseAgent.h; sourceTree = "<group>"; };
     
    1457414578                                59102FB914327D3B003C9D04 /* ContentSearchUtils.cpp */,
    1457514579                                59102FBA14327D3B003C9D04 /* ContentSearchUtils.h */,
     14580                                7AABA25714BC613300AA9A11 /* DOMEditor.cpp */,
     14581                                7AABA25814BC613300AA9A11 /* DOMEditor.h */,
    1457614582                                4F1442261339FD6200E0D6F8 /* DOMNodeHighlighter.cpp */,
    1457714583                                4F1442271339FD6200E0D6F8 /* DOMNodeHighlighter.h */,
     
    2489824904                                974A862314B7ADBB003FDC76 /* FrameDestructionObserver.h in Headers */,
    2489924905                                97D2AD0414B823A60093DF32 /* DOMWindowProperty.h in Headers */,
     24906                                7AABA25A14BC613300AA9A11 /* DOMEditor.h in Headers */,
    2490024907                        );
    2490124908                        runOnlyForDeploymentPostprocessing = 0;
     
    2780427811                                974A862214B7ADBB003FDC76 /* FrameDestructionObserver.cpp in Sources */,
    2780527812                                97D2AD0314B823A60093DF32 /* DOMWindowProperty.cpp in Sources */,
     27813                                7AABA25914BC613300AA9A11 /* DOMEditor.cpp in Sources */,
    2780627814                        );
    2780727815                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp

    r104371 r104586  
    4848#include "Cookie.h"
    4949#include "CookieJar.h"
     50#include "DOMEditor.h"
    5051#include "DOMNodeHighlighter.h"
    5152#include "DOMWindow.h"
     
    633634void InspectorDOMAgent::setOuterHTML(ErrorString* errorString, int nodeId, const String& outerHTML, int* newId)
    634635{
     636    if (!nodeId) {
     637        DOMEditor domEditor(m_document.get());
     638        domEditor.patch(outerHTML);
     639        *newId = 0;
     640        return;
     641    }
     642
    635643    Node* node = assertNode(errorString, nodeId);
    636644    if (!node)
    637645        return;
    638646
    639     Element* parentElement = node->parentElement();
    640     if (!parentElement)
    641         return;
     647    Node* parentNode = node->parentNode();
     648    if (!parentNode) {
     649        *errorString = "Editing of the detached nodes is not supported";
     650        return;
     651    }
    642652
    643653    Document* document = node->ownerDocument();
     
    650660
    651661    RefPtr<DocumentFragment> fragment = DocumentFragment::create(document);
    652     fragment->parseHTML(outerHTML, parentElement);
     662    fragment->parseHTML(outerHTML, parentNode->nodeType() == Node::ELEMENT_NODE ? static_cast<Element*>(parentNode) : document->documentElement());
    653663
    654664    ExceptionCode ec = 0;
    655     parentElement->replaceChild(fragment.release(), node, ec);
     665    parentNode->replaceChild(fragment.release(), node, ec);
    656666    if (ec) {
    657667        *errorString = "Failed to replace Node with new contents";
     
    671681    }
    672682
    673     Node* newNode = previousSibling ? previousSibling->nextSibling() : parentElement->firstChild();
     683    Node* newNode = previousSibling ? previousSibling->nextSibling() : parentNode->firstChild();
    674684    if (!newNode) {
    675685        // The only child node has been deleted.
  • trunk/Source/WebCore/inspector/front-end/DOMAgent.js

    r103623 r104586  
    530530    this._attributeLoadNodeIds = {};
    531531    InspectorBackend.registerDOMDispatcher(new WebInspector.DOMDispatcher(this));
     532    if (WebInspector.experimentsSettings.freeFlowDOMEditing.isEnabled())
     533        new WebInspector.DOMModelResourceBinding(this);
    532534}
    533535
     
    10751077 */
    10761078WebInspector.domAgent = null;
     1079
     1080/**
     1081 * @constructor
     1082 * @implements {WebInspector.ResourceDomainModelBinding}
     1083 */
     1084WebInspector.DOMModelResourceBinding = function(domAgent)
     1085{
     1086    this._domAgent = domAgent;
     1087    WebInspector.Resource.registerDomainModelBinding(WebInspector.Resource.Type.Document, this);
     1088}
     1089
     1090WebInspector.DOMModelResourceBinding.prototype = {
     1091    setContent: function(resource, content, majorChange, userCallback)
     1092    {
     1093        DOMAgent.setOuterHTML(0, content, userCallback);
     1094    },
     1095
     1096    canSetContent: function()
     1097    {
     1098        return true;
     1099    }
     1100}
     1101
     1102WebInspector.DOMModelResourceBinding.prototype.__proto__ = WebInspector.ResourceDomainModelBinding.prototype;
  • trunk/Source/WebCore/inspector/front-end/Settings.js

    r104541 r104586  
    170170    this.useScriptsNavigator = this._createExperiment("useScriptsNavigator", "Use file navigator and tabbed editor container in scripts panel");
    171171    this.sourceFrameAlwaysEditable = this._createExperiment("sourceFrameAlwaysEditable", "Make resources always editable");
     172    this.freeFlowDOMEditing = this._createExperiment("freeFlowDOMEditing", "Enable free flow DOM editing");
    172173
    173174    this._cleanUpSetting();
Note: See TracChangeset for help on using the changeset viewer.