b57729da3d3d957eb3fcc678166082cff60d1dc4
[WebKit-https.git] / Source / WebCore / platform / network / qt / DnsPrefetchHelper.h
1 /*
2     Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Library General Public
6     License as published by the Free Software Foundation; either
7     version 2 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Library General Public License for more details.
13
14     You should have received a copy of the GNU Library General Public License
15     along with this library; see the file COPYING.LIB.  If not, write to
16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17     Boston, MA 02110-1301, USA.
18 */
19 #ifndef DnsPrefetchHelper_h
20 #define DnsPrefetchHelper_h
21
22 #include <QObject>
23 #include <QCache>
24 #include <QHostInfo>
25 #include <QSet>
26 #include <QString>
27 #include <QTime>
28
29 namespace WebCore {
30
31     class DnsPrefetchHelper : public QObject {
32         Q_OBJECT
33     public:
34         DnsPrefetchHelper() : QObject(), currentLookups(0) { }
35
36     public Q_SLOTS:
37         void lookup(QString hostname)
38         {
39             if (hostname.isEmpty())
40                 return; // this actually happens
41             if (currentLookups >= 10)
42                 return; // do not launch more than 10 lookups at the same time
43
44             currentLookups++;
45             QHostInfo::lookupHost(hostname, this, SLOT(lookedUp(QHostInfo)));
46         }
47
48         void lookedUp(const QHostInfo&)
49         {
50             // we do not cache the result, we throw it away.
51             // we currently rely on the OS to cache the results. If it does not do that
52             // then at least the ISP nameserver did it.
53             // Since Qt 4.6.3, Qt also has a small DNS cache.
54             currentLookups--;
55         }
56
57     protected:
58         int currentLookups;
59     };
60
61
62 }
63
64 #endif // DnsPrefetchHelper_h