Fix broken build (CachedObject.cpp was still including kcharsets.h).
[WebKit-https.git] / WebCore / khtml / misc / CachedObject.cpp
1 /*
2     This file is part of the KDE libraries
3
4     Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
5     Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
6     Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
7     Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
8
9     This library is free software; you can redistribute it and/or
10     modify it under the terms of the GNU Library General Public
11     License as published by the Free Software Foundation; either
12     version 2 of the License, or (at your option) any later version.
13
14     This library is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17     Library General Public License for more details.
18
19     You should have received a copy of the GNU Library General Public License
20     along with this library; see the file COPYING.LIB.  If not, write to
21     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22     Boston, MA 02111-1307, USA.
23
24     This class provides all functionality needed for loading images, style sheets and html
25     pages from the web. It has a memory cache for these objects.
26 */
27
28 #include "config.h"
29
30 #include "CachedObject.h"
31 #include "Cache.h"
32
33 #include <qasyncio.h>
34 #include <kio/job.h>
35 #include <kio/jobclasses.h>
36 #include <kdebug.h>
37 #include "decoder.h"
38
39 #include <kxmlcore/Assertions.h>
40
41 using namespace DOM;
42
43 namespace khtml {
44
45 CachedObject::~CachedObject()
46 {
47     if(m_deleted) abort();
48     Cache::removeFromLRUList(this);
49     m_deleted = true;
50     setResponse(0);
51     setAllData(0);
52 }
53
54 void CachedObject::finish()
55 {
56     if (m_size > Cache::maxCacheableObjectSize())
57         m_status = Uncacheable;
58     else
59         m_status = Cached;
60     KURL url(m_url.qstring());
61     if (m_expireDateChanged && url.protocol().startsWith("http"))
62         m_expireDateChanged = false;
63 }
64
65 void CachedObject::setExpireDate(time_t _expireDate, bool changeHttpCache)
66 {
67     if ( _expireDate == m_expireDate)
68         return;
69
70     if (m_status == Uncacheable || m_status == Cached)
71     {
72         finish();
73     }
74     m_expireDate = _expireDate;
75     if (changeHttpCache && m_expireDate)
76        m_expireDateChanged = true;
77 }
78
79 bool CachedObject::isExpired() const
80 {
81     if (!m_expireDate) return false;
82     time_t now = time(0);
83     return (difftime(now, m_expireDate) >= 0);
84 }
85
86 void CachedObject::setRequest(Request *_request)
87 {
88     if ( _request && !m_request )
89         m_status = Pending;
90     m_request = _request;
91     if (canDelete() && m_free)
92         delete this;
93     else if (allowInLRUList())
94         Cache::insertInLRUList(this);
95 }
96
97 void CachedObject::ref(CachedObjectClient *c)
98 {
99     m_clients.insert(c, c);
100     Cache::removeFromLRUList(this);
101     increaseAccessCount();
102 }
103
104 void CachedObject::deref(CachedObjectClient *c)
105 {
106     m_clients.remove(c);
107     if (allowInLRUList())
108         Cache::insertInLRUList(this);
109 }
110
111 void CachedObject::setSize(int size)
112 {
113     bool sizeChanged = Cache::adjustSize(this, size - m_size);
114
115     // The object must now be moved to a different queue, since its size has been changed.
116     if (sizeChanged && allowInLRUList())
117         Cache::removeFromLRUList(this);
118
119     m_size = size;
120     
121     if (sizeChanged && allowInLRUList())
122         Cache::insertInLRUList(this);
123 }
124
125 };