[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kfm-devel
Subject:    Re: Patch for 67179
From:       Zack Rusin <zack () kde ! org>
Date:       2003-12-09 0:25:27
[Download RAW message or body]

On Monday 08 December 2003 16:22, Dirk Mueller wrote:
> I wouldn't name it "cacheable" though, since caching has a different
> meaning for me imho. But otherwise okay.

Great. Well, then this is the final version.

Zack

-- 
He who laughs last thinks slowest!

["savform.diff" (text/x-diff)]

? cur.diff
? debug
? result
? results
? results1
? results2
? resultx
? resultx2
? rendering/render_obj.cpp.diff
Index: khtmlview.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/khtmlview.cpp,v
retrieving revision 1.596
diff -u -3 -p -b -B -r1.596 khtmlview.cpp
--- khtmlview.cpp	5 Dec 2003 18:43:45 -0000	1.596
+++ khtmlview.cpp	9 Dec 2003 00:24:03 -0000
@@ -1850,6 +1850,32 @@ void KHTMLView::addFormCompletionItem(co
     d->formCompletions->writeEntry(name, items);
 }
 
+void KHTMLView::addNonPasswordStorableSite(const QString& host)
+{
+    if (!d->formCompletions) {
+        d->formCompletions = new KSimpleConfig(locateLocal("data", "khtml/formcompletions"));
+    }
+
+    d->formCompletions->setGroup("NonPasswordStorableSites");
+    QStringList sites = d->formCompletions->readListEntry("Sites");
+    sites.append(host);
+    d->formCompletions->writeEntry("Sites", sites);
+    d->formCompletions->sync();
+    d->formCompletions->setGroup(QString::null);//reset
+}
+
+bool KHTMLView::nonPasswordStorableSite(const QString& host) const
+{
+    if (!d->formCompletions) {
+        d->formCompletions = new KSimpleConfig(locateLocal("data", "khtml/formcompletions"));
+    }
+    d->formCompletions->setGroup("NonPasswordStorableSites");
+    QStringList sites =  d->formCompletions->readListEntry("Sites");
+    d->formCompletions->setGroup(QString::null);//reset
+
+    return (sites.find(host) != sites.end());
+}
+
 // returns true if event should be swallowed
 bool KHTMLView::dispatchMouseEvent(int eventId, DOM::NodeImpl *targetNode, bool cancelable,
 				   int detail,QMouseEvent *_mouse, bool setUnder,
Index: khtmlview.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/khtmlview.h,v
retrieving revision 1.199
diff -u -3 -p -b -B -r1.199 khtmlview.h
--- khtmlview.h	27 Nov 2003 14:48:52 -0000	1.199
+++ khtmlview.h	9 Dec 2003 00:24:03 -0000
@@ -254,6 +254,9 @@ private:
     void clearCompletionHistory(const QString& name);
     void addFormCompletionItem(const QString &name, const QString &value);
 
+    void addNonPasswordStorableSite( const QString& host );
+    bool nonPasswordStorableSite( const QString& host ) const;
+
     bool dispatchMouseEvent(int eventId, DOM::NodeImpl *targetNode, bool cancelable,
 			    int detail,QMouseEvent *_mouse, bool setUnder,
 			    int mouseEventType);
Index: html/html_formimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_formimpl.cpp,v
retrieving revision 1.354
diff -u -3 -p -b -B -r1.354 html_formimpl.cpp
--- html/html_formimpl.cpp	5 Dec 2003 14:35:28 -0000	1.354
+++ html/html_formimpl.cpp	9 Dec 2003 00:24:04 -0000
@@ -460,6 +460,8 @@ void HTMLFormElementImpl::submit(  )
         QMap<QString, QString> walletMap;
         bool havePassword = false;
         bool haveTextarea = false;
+        KURL formUrl(getDocument()->URL());
+        if (!view->nonPasswordStorableSite(formUrl.host())) {
         for (QPtrListIterator<HTMLGenericFormElementImpl> it(formElements); it.current(); ++it)
             if (it.current()->id() == ID_INPUT)  {
                 HTMLInputElementImpl* c = static_cast<HTMLInputElementImpl*> (it.current());
@@ -473,10 +475,21 @@ void HTMLFormElementImpl::submit(  )
             }
             else if (it.current()->id() == ID_TEXTAREA)
                 haveTextarea = true;
+        }
 
-        if (havePassword && !haveTextarea)  {
-            // ### ask the user if he wants to cache the form data, per domain etc
+        int savePassword = KMessageBox::Yes;
 
+        if (havePassword && !haveTextarea &&
+            (savePassword=KMessageBox::questionYesNoCancel(
+                0,
+                i18n("Konqueror has the ability to store the password "
+                     "in an encrypted wallet. When the wallet is unlocked, it "
+                     "can then automatically restore the login information "
+                     "next time you visit this site. Do you want to store "
+                     "the information now?"),
+                i18n("Save passwords"),
+                KStdGuiItem::yes(),
+                KGuiItem(i18n("Never for this site")))) == KMessageBox::Yes)  {
             KWallet::Wallet* w = view->part()->wallet();
             if (w)  {
                 QString key = calculateAutoFillKey(*this);
@@ -487,6 +500,8 @@ void HTMLFormElementImpl::submit(  )
                 w->setFolder(KWallet::Wallet::FormDataFolder());
                 w->writeMap(key, walletMap);
             }
+        } else if (savePassword == KMessageBox::No) {
+            view->addNonPasswordStorableSite(formUrl.host());
         }
 
         DOMString url(khtml::parseURL(getAttribute(ATTR_ACTION)));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic