10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This library is free software; you can redistribute it and/or
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    modify it under the terms of the GNU Library General Public
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    License as published by the Free Software Foundation; either
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    version 2 of the License, or (at your option) any later version.
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This library is distributed in the hope that it will be useful,
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    but WITHOUT ANY WARRANTY; without even the implied warranty of
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Library General Public License for more details.
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    You should have received a copy of the GNU Library General Public License
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    along with this library; see the file COPYING.LIB.  If not, write to
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Boston, MA 02110-1301, USA.
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h"
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HistoryItem.h"
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "FormData.h"
24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h>
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockbool WebCore::HistoryItem::restoreState(QDataStream& in, int version)
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
28cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // we only support version 1 for now
29cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
30cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (version != 1)
31cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return false;
32cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
33dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String url;
34dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String title;
35dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String altTitle;
36dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String orginalUrl;
37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String referrer;
38dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String target;
39dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String parrent;
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    double lastVisitedTime;
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool validUserData;
42dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String parent;
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool lastVisitWasHTTPNonGet;
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool lastVisitWasFailure;
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool isTargetItem;
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int visitCount;
47dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::Vector<WTF::String> documentState;
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebCore::IntPoint scrollPoint;
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WTF::Vector<int> weeklyVisitCounts;
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WTF::Vector<int> dailyVisitCounts;
51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // bool loadFormdata;
52dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    // WTF::String formContentType;
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // WTF::Vector<char> formData;
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    in >> url >> title >> altTitle >> lastVisitedTime >> orginalUrl >> referrer >> target >> parent;
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    in >> lastVisitWasHTTPNonGet >> lastVisitWasFailure >> isTargetItem >> visitCount >> documentState;
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    in >> scrollPoint >> dailyVisitCounts >> weeklyVisitCounts;
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /*in >> loadFormdata;
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (loadFormdata) {
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        in >> formContentType >> formData;
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // direct assigned (!)
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_formContentType = formContentType;
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_formData = FormData::create(CString(formData));
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }*/
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // use setters
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    adoptVisitCounts(dailyVisitCounts, weeklyVisitCounts);
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setScrollPoint(scrollPoint);
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setDocumentState(documentState);
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setVisitCount(visitCount);
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setIsTargetItem(isTargetItem);
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setLastVisitWasFailure(lastVisitWasFailure);
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setLastVisitWasHTTPNonGet(lastVisitWasHTTPNonGet);
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setParent(parent);
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setTarget(target);
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setReferrer(referrer);
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setOriginalURLString(orginalUrl);
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setURLString(url);
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setLastVisitedTime(lastVisitedTime);
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setTitle(title);
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setAlternateTitle(altTitle);
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // at the end load userData
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    in >> validUserData;
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (validUserData) {
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVariant tmp;
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        in >> tmp;
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        setUserData(tmp);
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return in.status() == QDataStream::Ok;
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
93cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQDataStream& WebCore::HistoryItem::saveState(QDataStream& out, int version) const
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
95cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // we only support version 1 for now.
96cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (version != 1)
97cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return out;
98cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    out << urlString() << title() << alternateTitle() << lastVisitedTime();
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    out << originalURLString() << referrer() << target() << parent();
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    out << lastVisitWasHTTPNonGet() << lastVisitWasFailure() << isTargetItem();
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    out << visitCount() << documentState() << scrollPoint();
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    out << dailyVisitCounts() << weeklyVisitCounts();
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /*if (m_formData) {
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        out << true;
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        out << formContentType();
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        out << m_formData->flatten();
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    } else {
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        out << false;
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }*/
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // save user data
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (userData().isValid())
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        out << true << userData();
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    else
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        out << false;
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return out;
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
120