- Revision
- 94068
- Author
- [email protected]
- Date
- 2011-08-30 04:23:24 -0700 (Tue, 30 Aug 2011)
Log Message
lastChangeWasUserEdit continues to return true when innerText or textContent is modified
https://bugs.webkit.org/show_bug.cgi?id=67183
Reviewed by Kent Tamura.
Source/WebCore:
Fixed the bug by calling setLastChangeWasNotUserEdit in HTMLTextAreaElement::childrenChanged.
Also got rid of HTMLTextFormControlElement::subtreeHasChanged because it was a needless indirection.
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::subtreeHasChanged): No longer calls HTMLTextFormControlElement::subtreeHasChanged.
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::childrenChanged): Calls setLastChangeWasNotUserEdit.
(WebCore::HTMLTextAreaElement::subtreeHasChanged): No longer calls HTMLTextFormControlElement::subtreeHasChanged.
* html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::defaultEventHandler): Merged subtreeHasChanged.
(WebCore::HTMLTextFormControlElement::setInnerTextValue): No longer set m_lastChangeWasUserEdit to false
since this is now done when renderers are set dirty.
* html/HTMLTextFormControlElement.h: Made subtreeHasChanged a pure virtual function.
LayoutTests:
Two test cases now pass.
* fast/forms/textfield-lastchange-was-useredit-expected.txt:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (94067 => 94068)
--- trunk/LayoutTests/ChangeLog 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/LayoutTests/ChangeLog 2011-08-30 11:23:24 UTC (rev 94068)
@@ -1,3 +1,14 @@
+2011-08-30 Ryosuke Niwa <[email protected]>
+
+ lastChangeWasUserEdit continues to return true when innerText or textContent is modified
+ https://bugs.webkit.org/show_bug.cgi?id=67183
+
+ Reviewed by Kent Tamura.
+
+ Two test cases now pass.
+
+ * fast/forms/textfield-lastchange-was-useredit-expected.txt:
+
2011-08-29 Yury Semikhatsky <[email protected]>
Web Inspector: wrong script display name when there is a slash in its URL query parameters
Modified: trunk/LayoutTests/fast/forms/textfield-lastchange-was-useredit-expected.txt (94067 => 94068)
--- trunk/LayoutTests/fast/forms/textfield-lastchange-was-useredit-expected.txt 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/LayoutTests/fast/forms/textfield-lastchange-was-useredit-expected.txt 2011-08-30 11:23:24 UTC (rev 94068)
@@ -19,9 +19,9 @@
PASS textField.style.display = null; internals.wasLastChangeUserEdit(textField) is false
PASS document.execCommand("SelectAll", false, null); internals.wasLastChangeUserEdit(textField) is false
PASS document.execCommand("Delete", false, null); internals.wasLastChangeUserEdit(textField) is true
-FAIL textField.textContent = "hello\nworld"; internals.wasLastChangeUserEdit(textField) should be false. Was true.
+PASS textField.textContent = "hello\nworld"; internals.wasLastChangeUserEdit(textField) is false
PASS document.execCommand("InsertText", false, "\nWebKit rocks"); internals.wasLastChangeUserEdit(textField) is true
-FAIL textField.innerText = " WebKit "; internals.wasLastChangeUserEdit(textField) should be false. Was true.
+PASS textField.innerText = " WebKit "; internals.wasLastChangeUserEdit(textField) is false
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/Source/WebCore/ChangeLog (94067 => 94068)
--- trunk/Source/WebCore/ChangeLog 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/Source/WebCore/ChangeLog 2011-08-30 11:23:24 UTC (rev 94068)
@@ -1,3 +1,25 @@
+2011-08-30 Ryosuke Niwa <[email protected]>
+
+ lastChangeWasUserEdit continues to return true when innerText or textContent is modified
+ https://bugs.webkit.org/show_bug.cgi?id=67183
+
+ Reviewed by Kent Tamura.
+
+ Fixed the bug by calling setLastChangeWasNotUserEdit in HTMLTextAreaElement::childrenChanged.
+
+ Also got rid of HTMLTextFormControlElement::subtreeHasChanged because it was a needless indirection.
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::subtreeHasChanged): No longer calls HTMLTextFormControlElement::subtreeHasChanged.
+ * html/HTMLTextAreaElement.cpp:
+ (WebCore::HTMLTextAreaElement::childrenChanged): Calls setLastChangeWasNotUserEdit.
+ (WebCore::HTMLTextAreaElement::subtreeHasChanged): No longer calls HTMLTextFormControlElement::subtreeHasChanged.
+ * html/HTMLTextFormControlElement.cpp:
+ (WebCore::HTMLTextFormControlElement::defaultEventHandler): Merged subtreeHasChanged.
+ (WebCore::HTMLTextFormControlElement::setInnerTextValue): No longer set m_lastChangeWasUserEdit to false
+ since this is now done when renderers are set dirty.
+ * html/HTMLTextFormControlElement.h: Made subtreeHasChanged a pure virtual function.
+
2011-08-29 Yury Semikhatsky <[email protected]>
Web Inspector: wrong script display name when there is a slash in its URL query parameters
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (94067 => 94068)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2011-08-30 11:23:24 UTC (rev 94068)
@@ -616,8 +616,6 @@
ASSERT(renderer());
RenderTextControlSingleLine* renderTextControl = toRenderTextControlSingleLine(renderer());
- HTMLTextFormControlElement::subtreeHasChanged();
-
bool wasChanged = wasChangedSinceLastFormControlChangeEvent();
setChangedSinceLastFormControlChangeEvent(true);
Modified: trunk/Source/WebCore/html/HTMLTextAreaElement.cpp (94067 => 94068)
--- trunk/Source/WebCore/html/HTMLTextAreaElement.cpp 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/Source/WebCore/html/HTMLTextAreaElement.cpp 2011-08-30 11:23:24 UTC (rev 94068)
@@ -98,6 +98,7 @@
void HTMLTextAreaElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
+ setLastChangeWasNotUserEdit();
if (!m_isDirty)
setNonDirtyValue(defaultValue());
HTMLElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
@@ -230,8 +231,6 @@
void HTMLTextAreaElement::subtreeHasChanged()
{
- HTMLTextFormControlElement::subtreeHasChanged();
-
setChangedSinceLastFormControlChangeEvent(true);
setFormControlValueMatchesRenderer(false);
setNeedsValidityCheck();
Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp (94067 => 94068)
--- trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp 2011-08-30 11:23:24 UTC (rev 94068)
@@ -89,6 +89,7 @@
void HTMLTextFormControlElement::defaultEventHandler(Event* event)
{
if (event->type() == eventNames().webkitEditableContentChangedEvent && renderer() && renderer()->isTextControl()) {
+ m_lastChangeWasUserEdit = true;
subtreeHasChanged();
return;
}
@@ -103,11 +104,6 @@
innerTextElement()->defaultEventHandler(event);
}
-void HTMLTextFormControlElement::subtreeHasChanged()
-{
- m_lastChangeWasUserEdit = true;
-}
-
String HTMLTextFormControlElement::strippedPlaceholder() const
{
// According to the HTML5 specification, we need to remove CR and LF from
@@ -475,9 +471,6 @@
innerTextElement()->appendChild(HTMLBRElement::create(document()), ec);
ASSERT(!ec);
}
-
- // We set m_lastChangeWasUserEdit to false since this change was not explicitly made by the user (say, via typing on the keyboard), see <rdar://problem/5359921>.
- m_lastChangeWasUserEdit = false;
}
setFormControlValueMatchesRenderer(true);
Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.h (94067 => 94068)
--- trunk/Source/WebCore/html/HTMLTextFormControlElement.h 2011-08-30 10:57:11 UTC (rev 94067)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.h 2011-08-30 11:23:24 UTC (rev 94068)
@@ -97,7 +97,7 @@
bool hasCachedSelection() const { return m_cachedSelectionStart >= 0; }
virtual void defaultEventHandler(Event*);
- virtual void subtreeHasChanged();
+ virtual void subtreeHasChanged() = 0;
void setLastChangeWasNotUserEdit() { m_lastChangeWasUserEdit = false; }
private: