2007-07-27 Ada Chan <adachan@apple.com>
authoradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Jul 2007 17:27:48 +0000 (17:27 +0000)
committeradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Jul 2007 17:27:48 +0000 (17:27 +0000)
        Reviewed by Adam.

        Added methods to track user edited text fields now that
        <rdar://problem/5359921> has been fixed.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::QueryInterface):
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::QueryInterface):
        (DOMHTMLTextAreaElement::isUserEdited):
        * DOMHTMLClasses.h:
        * Interfaces/DOMPrivate.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@24738 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/win/ChangeLog
WebKit/win/DOMHTMLClasses.cpp
WebKit/win/DOMHTMLClasses.h
WebKit/win/Interfaces/DOMPrivate.idl

index e14bc4af2f42a19437293a58b0c95e677a6584ab..487bf2da6d8888ae31f17c9ce03112d23dee7957 100644 (file)
@@ -1,3 +1,18 @@
+2007-07-27  Ada Chan  <adachan@apple.com>
+
+        Reviewed by Adam.
+        
+        Added methods to track user edited text fields now that 
+        <rdar://problem/5359921> has been fixed.
+
+        * DOMHTMLClasses.cpp:
+        (DOMHTMLInputElement::QueryInterface):
+        (DOMHTMLInputElement::isUserEdited):
+        (DOMHTMLTextAreaElement::QueryInterface):
+        (DOMHTMLTextAreaElement::isUserEdited):
+        * DOMHTMLClasses.h:
+        * Interfaces/DOMPrivate.idl:
+
 2007-07-27  Adam Roben  <aroben@apple.com>
 
         Fix Bug 14773: REGRESSION (r24630): ASSERT_NOT_REACHED in DOMHTMLInputElement::name on Windows
index f7a0d2b125b724d5a95d412500e76d2216e9953c..063023feaa98c311eac35b61b375733677be7ce2 100644 (file)
@@ -42,6 +42,7 @@
 #include <WebCore/HTMLTextAreaElement.h>
 #include <WebCore/IntRect.h>
 #include <WebCore/RenderObject.h>
+#include <WebCore/RenderTextControl.h>
 #pragma warning(pop)
 
 using namespace WebCore;
@@ -865,6 +866,8 @@ HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::QueryInterface(REFIID riid, void*
         *ppvObject = static_cast<IDOMHTMLInputElement*>(this);
     else if (IsEqualGUID(riid, IID_IFormsAutoFillTransition))
         *ppvObject = static_cast<IFormsAutoFillTransition*>(this);
+    else if (IsEqualGUID(riid, IID_IFormPromptAdditions))
+        *ppvObject = static_cast<IFormPromptAdditions*>(this);    
     else
         return DOMHTMLElement::QueryInterface(riid, ppvObject);
 
@@ -1250,6 +1253,25 @@ HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAutofilled(
     return S_OK;
 }
 
+// DOMHTMLInputElement -- IFormPromptAdditions ------------------------------------
+
+HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isUserEdited( 
+    /* [retval][out] */ BOOL *result)
+{
+    if (!result)
+        return E_POINTER;
+
+    *result = FALSE;
+    ASSERT(m_element);
+    BOOL textField = FALSE;
+    if (FAILED(isTextField(&textField)) || !textField)
+        return S_OK;
+    RenderObject* renderer = m_element->renderer();
+    if (renderer && static_cast<WebCore::RenderTextControl*>(renderer)->isUserEdited())
+        *result = TRUE;
+    return S_OK;
+}
+
 // DOMHTMLTextAreaElement - IUnknown ----------------------------------------------
 
 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::QueryInterface(REFIID riid, void** ppvObject)
@@ -1257,6 +1279,8 @@ HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::QueryInterface(REFIID riid, vo
     *ppvObject = 0;
     if (IsEqualGUID(riid, IID_IDOMHTMLTextAreaElement))
         *ppvObject = static_cast<IDOMHTMLTextAreaElement*>(this);
+    else if (IsEqualGUID(riid, IID_IFormPromptAdditions))
+        *ppvObject = static_cast<IFormPromptAdditions*>(this);    
     else
         return DOMHTMLElement::QueryInterface(riid, ppvObject);
 
@@ -1428,3 +1452,19 @@ HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::select( void)
     textareaElement->select();
     return S_OK;
 }
+
+// DOMHTMLTextAreaElement -- IFormPromptAdditions ------------------------------------
+
+HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::isUserEdited( 
+    /* [retval][out] */ BOOL *result)
+{
+    if (!result)
+        return E_POINTER;
+
+    *result = FALSE;
+    ASSERT(m_element);
+    RenderObject* renderer = m_element->renderer();
+    if (renderer && static_cast<WebCore::RenderTextControl*>(renderer)->isUserEdited())
+        *result = TRUE;
+    return S_OK;
+}
index b36e3f62826253190763855f4ee17d653a83a5bc..7adb7e2aa7bbbf44ba02c2b05e0de481f713d146 100644 (file)
@@ -1613,7 +1613,7 @@ public:
         /* [in] */ BSTR value);
 };
 
-class DOMHTMLInputElement : public DOMHTMLElement, public IDOMHTMLInputElement, public IFormsAutoFillTransition
+class DOMHTMLInputElement : public DOMHTMLElement, public IDOMHTMLInputElement, public IFormsAutoFillTransition, public IFormPromptAdditions
 {
 protected:
     DOMHTMLInputElement();
@@ -2011,9 +2011,13 @@ public:
     
     virtual HRESULT STDMETHODCALLTYPE setAutofilled( 
         /* [in] */ BOOL filled);
+
+    // IFormPromptAdditions
+    virtual HRESULT STDMETHODCALLTYPE isUserEdited( 
+        /* [retval][out] */ BOOL *result);
 };
 
-class DOMHTMLTextAreaElement : public DOMHTMLElement, public IDOMHTMLTextAreaElement
+class DOMHTMLTextAreaElement : public DOMHTMLElement, public IDOMHTMLTextAreaElement, public IFormPromptAdditions
 {
 protected:
     DOMHTMLTextAreaElement();
@@ -2332,6 +2336,10 @@ public:
         /* [in] */ BSTR value);
         
     virtual HRESULT STDMETHODCALLTYPE select( void);
+
+    // IFormPromptAdditions
+    virtual HRESULT STDMETHODCALLTYPE isUserEdited( 
+        /* [retval][out] */ BOOL *result);
 };
 
 #endif
index a93008b01927cf3784712662be28385bb4118dbc..6d78172e07897da7ea3c9e389b5163930246e2cb 100644 (file)
@@ -108,6 +108,27 @@ interface IFormsAutoFillTransition : IUnknown
     HRESULT setAutofilled([in] BOOL filled);
 }
 
+/*
+    // These changes are necessary to detect whether a form input was modified by a user
+    // or javascript
+    @interface DOMHTMLInputElement (FormPromptAdditions)
+
+    @interface DOMHTMLTextAreaElement (FormPromptAdditions)
+*/
+[
+    object,
+    oleautomation,
+    uuid(C8C5F0CD-07B0-4a32-BFA8-AE465E80DD3C),
+    pointer_default(unique)
+]
+interface IFormPromptAdditions : IUnknown
+{
+    /*
+        - (BOOL)_isUserEdited;
+    */
+    HRESULT isUserEdited([out, retval] BOOL* result);
+}
+
 /*
     All the methods in this category are used by Safari forms autofill and should not be used for any other purpose.
     They are stopgap measures until we finish transitioning form controls to not use NSView. Each one should become