[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
rjw
rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:56:01 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit f86b4454661d641dcf8067f897e3eec986dfc7bd
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Feb 21 01:48:12 2002 +0000
Some groundwork to bring WebFoundation callbacks up to
WebKit.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@648 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index e6a75d1..9a92d2c 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,28 @@
+2002-02-20 Richard Williamson <rjw at apple.com>
+
+ Some groundwork to bring WebFoundation callbacks up to
+ WebKit.
+
+ * src/kdelibs/khtml/misc/loader.h:
+ * src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidBeginLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidCancelLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidFinishLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (KHTMLPart::openURL),
+ (KHTMLPart::closeURL), (KHTMLPart::write), (KHTMLPart::checkCompleted):
+ * src/kwq/KWQKloader.mm: (CachedCSSStyleSheet::CachedCSSStyleSheet),
+ (CachedScript::CachedScript), (CachedImage::CachedImage), (-[URLLoadClient
+ initWithLoader:dataSource:]), (-[URLLoadClient
+ WCURLHandleResourceDidBeginLoading:userData:]), (-[URLLoadClient
+ WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
+ WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
+ WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[URLLoadClient
+ WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (Loader::load),
+ (Loader::servePendingRequests), (Cache::requestImage),
+ (Cache::requestStyleSheet), (Cache::requestScript):
+ * src/kwq/kio/jobclasses.h:
+
2002-02-20 Maciej Stachowiak <mjs at apple.com>
* src/kdelibs/kjs/kjs-test:
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index e6a75d1..9a92d2c 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,28 @@
+2002-02-20 Richard Williamson <rjw at apple.com>
+
+ Some groundwork to bring WebFoundation callbacks up to
+ WebKit.
+
+ * src/kdelibs/khtml/misc/loader.h:
+ * src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidBeginLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidCancelLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidFinishLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (KHTMLPart::openURL),
+ (KHTMLPart::closeURL), (KHTMLPart::write), (KHTMLPart::checkCompleted):
+ * src/kwq/KWQKloader.mm: (CachedCSSStyleSheet::CachedCSSStyleSheet),
+ (CachedScript::CachedScript), (CachedImage::CachedImage), (-[URLLoadClient
+ initWithLoader:dataSource:]), (-[URLLoadClient
+ WCURLHandleResourceDidBeginLoading:userData:]), (-[URLLoadClient
+ WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
+ WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
+ WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[URLLoadClient
+ WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (Loader::load),
+ (Loader::servePendingRequests), (Cache::requestImage),
+ (Cache::requestStyleSheet), (Cache::requestScript):
+ * src/kwq/kio/jobclasses.h:
+
2002-02-20 Maciej Stachowiak <mjs at apple.com>
* src/kdelibs/kjs/kjs-test:
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index e6a75d1..9a92d2c 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,28 @@
+2002-02-20 Richard Williamson <rjw at apple.com>
+
+ Some groundwork to bring WebFoundation callbacks up to
+ WebKit.
+
+ * src/kdelibs/khtml/misc/loader.h:
+ * src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidBeginLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidCancelLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandleResourceDidFinishLoading:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[KHTMLPartLoadClient
+ WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (KHTMLPart::openURL),
+ (KHTMLPart::closeURL), (KHTMLPart::write), (KHTMLPart::checkCompleted):
+ * src/kwq/KWQKloader.mm: (CachedCSSStyleSheet::CachedCSSStyleSheet),
+ (CachedScript::CachedScript), (CachedImage::CachedImage), (-[URLLoadClient
+ initWithLoader:dataSource:]), (-[URLLoadClient
+ WCURLHandleResourceDidBeginLoading:userData:]), (-[URLLoadClient
+ WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
+ WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
+ WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[URLLoadClient
+ WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (Loader::load),
+ (Loader::servePendingRequests), (Cache::requestImage),
+ (Cache::requestStyleSheet), (Cache::requestScript):
+ * src/kwq/kio/jobclasses.h:
+
2002-02-20 Maciej Stachowiak <mjs at apple.com>
* src/kdelibs/kjs/kjs-test:
diff --git a/WebCore/khtml/misc/loader.h b/WebCore/khtml/misc/loader.h
index fd25e47..ec7edf0 100644
--- a/WebCore/khtml/misc/loader.h
+++ b/WebCore/khtml/misc/loader.h
@@ -67,6 +67,7 @@ namespace khtml
class CachedObject;
class Request;
class LoaderPrivate;
+ class DocLoader;
/**
* @internal
@@ -95,8 +96,9 @@ namespace khtml
Uncacheable // to big to be cached,
}; // will be destroyed as soon as possible
- CachedObject(const DOM::DOMString &url, Type type, bool _reload, int _expireDate)
+ CachedObject(const DocLoader *loader, const DOM::DOMString &url, Type type, bool _reload, int _expireDate)
{
+ m_loader = loader;
m_url = url;
m_type = type;
m_status = Pending;
@@ -105,12 +107,12 @@ namespace khtml
m_reload = _reload;
m_request = 0;
m_expireDate = _expireDate;
- m_deleted = false;
+ m_deleted = false;
}
virtual ~CachedObject() {
- if(m_deleted) abort();
+ if(m_deleted) abort();
m_deleted = true;
- }
+ }
virtual void data( QBuffer &buffer, bool eof) = 0;
virtual void error( int err, const char *text ) = 0;
@@ -135,41 +137,47 @@ namespace khtml
*/
void finish();
- /*
- * Called by the cache if the object has been removed from the cache dict
- * while still being referenced. This means the object should kill itself
- * if its reference counter drops down to zero.
- */
- void setFree( bool b ) { m_free = b; }
-
- bool reload() const { return m_reload; }
-
- void setRequest(Request *_request);
-
- bool canDelete() const { return (m_clients.count() == 0 && !m_request); }
+ /*
+ * Called by the cache if the object has been removed from the cache dict
+ * while still being referenced. This means the object should kill itself
+ * if its reference counter drops down to zero.
+ */
+ void setFree( bool b ) { m_free = b; }
+
+ bool reload() const { return m_reload; }
+
+ void setRequest(Request *_request);
+
+ bool canDelete() const { return (m_clients.count() == 0 && !m_request); }
void setExpireDate(int _expireDate);
- /*
- * List of acceptable mimetypes seperated by ",". A mimetype may contain a wildcard.
- */
- // e.g. "text/*"
- QString accept() const { return m_accept; }
- void setAccept(const QString &_accept) { m_accept = _accept; }
+ /*
+ * List of acceptable mimetypes seperated by ",". A mimetype may contain a wildcard.
+ */
+ // e.g. "text/*"
+ QString accept() const { return m_accept; }
+ void setAccept(const QString &_accept) { m_accept = _accept; }
+
+ const DocLoader *loader() { return m_loader; }
+
protected:
- QList<CachedObjectClient> m_clients;
+
+ const DocLoader *m_loader;
+
+ QList<CachedObjectClient> m_clients;
DOM::DOMString m_url;
- QString m_accept;
- Request *m_request;
+ QString m_accept;
+ Request *m_request;
Type m_type;
Status m_status;
int m_size;
int m_expireDate;
- bool m_free;
- bool m_reload;
- bool m_deleted;
+ bool m_free;
+ bool m_reload;
+ bool m_deleted;
};
@@ -179,7 +187,7 @@ namespace khtml
class CachedCSSStyleSheet : public CachedObject
{
public:
- CachedCSSStyleSheet(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
+ CachedCSSStyleSheet(const DocLoader *loader, const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
virtual ~CachedCSSStyleSheet();
const DOM::DOMString &sheet() const { return m_sheet; }
@@ -204,7 +212,7 @@ namespace khtml
class CachedScript : public CachedObject
{
public:
- CachedScript(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
+ CachedScript(const DocLoader *loader, const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
virtual ~CachedScript();
const DOM::DOMString &script() const { return m_script; }
@@ -232,7 +240,7 @@ namespace khtml
{
Q_OBJECT
public:
- CachedImage(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate);
+ CachedImage(const DocLoader *loader, const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate);
virtual ~CachedImage();
const QPixmap &pixmap() const;
@@ -314,6 +322,7 @@ namespace khtml
void setReloading( bool );
void setShowAnimations( bool );
void removeCachedObject( CachedObject*) const;
+ const KHTMLPart *part() { return m_part; }
private:
friend class Cache;
@@ -340,6 +349,9 @@ namespace khtml
QBuffer m_buffer;
CachedObject *object;
DOM::DOMString m_baseURL;
+#ifdef _KWQ_
+ void *client;
+#endif
};
/**
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index c6a5359..98441bc 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -139,19 +139,23 @@ static void recursive(const DOM::Node &pNode, const DOM::Node &node)
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
m_part->closeURL();
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
+ KWQDEBUGLEVEL3 (0x2000, "userData = 0x%08x, data = 0x%08x, length %d\n", userData, data, [data length]);
if (!m_data) {
m_data = [data retain];
}
@@ -160,6 +164,7 @@ static void recursive(const DOM::Node &pNode, const DOM::Node &node)
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KWQDEBUGLEVEL2 (0x2000, "result = %d, userData = 0x%08x\n", result, userData);
}
@@ -395,7 +400,7 @@ bool KHTMLPart::openURL( const KURL &url )
urlString = [NSString stringWithCString:d->m_workingURL.url().latin1()];
// FIXME: temporary hack to make file: URLs work right
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
@@ -426,7 +431,7 @@ bool KHTMLPart::closeURL()
urlString = [NSString stringWithCString:d->m_url.url().latin1()];
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
@@ -581,8 +586,6 @@ bool KHTMLPart::onlyLocalReferences() const
}
-
-
void KHTMLPart::begin( const KURL &url, int xOffset, int yOffset)
{
//d->m_referrer = url.url();
@@ -683,7 +686,9 @@ void KHTMLPart::write(const char *str, int len)
double start = CFAbsoluteTimeGetCurrent();
#endif
- // FIX ME: This is very expensive.
+ // FIX ME: This is very expensive. We should using the IFMutableData
+ // that represents the document, and only constructing the complete
+ // string when requested.
d->m_documentSource += QString(str, len);
QString decoded;
@@ -699,6 +704,8 @@ void KHTMLPart::write(const char *str, int len)
d->m_decodingStarted = 1;
+ // Transition from provisional to committed data source at this point.
+
d->m_doc->applyChanges(true, true);
// end lines added in lieu of big fixme
@@ -1782,11 +1789,11 @@ void KHTMLPart::checkCompleted()
NSString *urlString;
urlString = [NSString stringWithCString:d->m_url.url().latin1()];
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
- urlString = [urlString substringToIndex:([urlString length] - 1)];
+ urlString = [urlString substringToIndex:([urlString length] - 1)];
}
// Still waiting for images/scripts from the loader ?
diff --git a/WebCore/kwq/KWQKHTMLPartImpl.mm b/WebCore/kwq/KWQKHTMLPartImpl.mm
index c6a5359..98441bc 100644
--- a/WebCore/kwq/KWQKHTMLPartImpl.mm
+++ b/WebCore/kwq/KWQKHTMLPartImpl.mm
@@ -139,19 +139,23 @@ static void recursive(const DOM::Node &pNode, const DOM::Node &node)
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
m_part->closeURL();
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
+ KWQDEBUGLEVEL3 (0x2000, "userData = 0x%08x, data = 0x%08x, length %d\n", userData, data, [data length]);
if (!m_data) {
m_data = [data retain];
}
@@ -160,6 +164,7 @@ static void recursive(const DOM::Node &pNode, const DOM::Node &node)
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KWQDEBUGLEVEL2 (0x2000, "result = %d, userData = 0x%08x\n", result, userData);
}
@@ -395,7 +400,7 @@ bool KHTMLPart::openURL( const KURL &url )
urlString = [NSString stringWithCString:d->m_workingURL.url().latin1()];
// FIXME: temporary hack to make file: URLs work right
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
@@ -426,7 +431,7 @@ bool KHTMLPart::closeURL()
urlString = [NSString stringWithCString:d->m_url.url().latin1()];
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
@@ -581,8 +586,6 @@ bool KHTMLPart::onlyLocalReferences() const
}
-
-
void KHTMLPart::begin( const KURL &url, int xOffset, int yOffset)
{
//d->m_referrer = url.url();
@@ -683,7 +686,9 @@ void KHTMLPart::write(const char *str, int len)
double start = CFAbsoluteTimeGetCurrent();
#endif
- // FIX ME: This is very expensive.
+ // FIX ME: This is very expensive. We should using the IFMutableData
+ // that represents the document, and only constructing the complete
+ // string when requested.
d->m_documentSource += QString(str, len);
QString decoded;
@@ -699,6 +704,8 @@ void KHTMLPart::write(const char *str, int len)
d->m_decodingStarted = 1;
+ // Transition from provisional to committed data source at this point.
+
d->m_doc->applyChanges(true, true);
// end lines added in lieu of big fixme
@@ -1782,11 +1789,11 @@ void KHTMLPart::checkCompleted()
NSString *urlString;
urlString = [NSString stringWithCString:d->m_url.url().latin1()];
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
- urlString = [urlString substringToIndex:([urlString length] - 1)];
+ urlString = [urlString substringToIndex:([urlString length] - 1)];
}
// Still waiting for images/scripts from the loader ?
diff --git a/WebCore/kwq/KWQKJobClasses.h b/WebCore/kwq/KWQKJobClasses.h
index 169bee3..bd1069f 100644
--- a/WebCore/kwq/KWQKJobClasses.h
+++ b/WebCore/kwq/KWQKJobClasses.h
@@ -172,8 +172,10 @@ public:
#else
void begin(void *requestor, void *userData);
#endif
+ KURL url() { return _url; }
#endif
+
// operators ---------------------------------------------------------------
// protected -------------------------------------------------------------------
diff --git a/WebCore/kwq/KWQKloader.mm b/WebCore/kwq/KWQKloader.mm
index f576eef..b30632b 100644
--- a/WebCore/kwq/KWQKloader.mm
+++ b/WebCore/kwq/KWQKloader.mm
@@ -101,8 +101,8 @@ void CachedObject::setRequest(Request *_request)
// -------------------------------------------------------------------------------------------
-CachedCSSStyleSheet::CachedCSSStyleSheet(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, CSSStyleSheet, reload, _expireDate)
+CachedCSSStyleSheet::CachedCSSStyleSheet(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, CSSStyleSheet, reload, _expireDate)
{
// It's css we want.
setAccept( QString::fromLatin1("text/css") );
@@ -167,8 +167,8 @@ void CachedCSSStyleSheet::error( int /*err*/, const char */*text*/ )
// -------------------------------------------------------------------------------------------
-CachedScript::CachedScript(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, Script, reload, _expireDate)
+CachedScript::CachedScript(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, Script, reload, _expireDate)
{
// It's javascript we want.
setAccept( QString::fromLatin1("application/x-javascript") );
@@ -381,8 +381,8 @@ static QString buildAcceptHeader()
// -------------------------------------------------------------------------------------
-CachedImage::CachedImage(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
- : QObject(), CachedObject(url, Image, reload, _expireDate)
+CachedImage::CachedImage(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
+ : QObject(), CachedObject(loader, url, Image, reload, _expireDate)
{
static const QString &acceptHeader = KGlobal::staticQString( buildAcceptHeader() );
@@ -906,21 +906,50 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
{
@public
Loader *m_loader;
- NSData *m_data;
+ id m_dataSource;
}
--(id)initWithLoader:(Loader *)loader;
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource;
@end
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
+{
+ int bytesSoFar; // 0 if this is the start of load
+ int totalToLoad; // -1 if this is not known.
+ // bytesSoFar == totalLoaded when complete
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
+}
+- init;
+ at end
+
+ at class IFError;
+
+ at protocol IFLoadHandler
+- (void)receivedProgress: (IFLoadProgress *)progress forResource: (NSString *)resourceDescription fromDataSource: (IFWebDataSource *)dataSource;
+
+- (void)receivedError: (IFError *)error forResource: (NSString *)resourceDescription partialProgress: (IFLoadProgress *)progress fromDataSource: (IFWebDataSource *)dataSource;
+
+ at end
+
+ at interface IFWebDataSource
+- controller;
+ at end
+
@implementation URLLoadClient
--(id)initWithLoader:(Loader *)loader
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource
{
if ((self = [super init])) {
m_loader = loader;
- m_data = nil;
-
+ m_dataSource = dataSource;
return self;
}
@@ -929,38 +958,57 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
- KIO::Job *job = static_cast<KIO::Job *>(userData);
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, urlString.latin1());
m_loader->slotFinished(job);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = 0;
+ loadProgress->bytesSoFar = 0;
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
- if (!m_data) {
- m_data = [data retain];
- }
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL4 (0x2000, "dataSource = 0x%08x for URL %s data at 0x%08x, length %d\n", m_dataSource, urlString.latin1(), data, [data length]);
- KIO::Job *job = static_cast<KIO::Job *>(userData);
m_loader->slotData(job, (const char *)[data bytes], [data length]);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = -1;
+ loadProgress->bytesSoFar = [data length];
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
--(void)dealloc
-{
- [m_data release];
-
- [super dealloc];
-}
@end
@@ -973,17 +1021,17 @@ public:
LoaderPrivate(Loader *parent)
{
_parent = parent;
- m_recv = [[URLLoadClient alloc] initWithLoader:parent];
+ //m_recv = [[URLLoadClient alloc] initWithLoader:parent dataSource: nil];
}
~LoaderPrivate()
{
- [m_recv autorelease];
+ //[m_recv autorelease];
}
private:
Loader *_parent;
- URLLoadClient *m_recv;
+ //URLLoadClient *m_recv;
};
} // namespace khtml
@@ -1000,9 +1048,30 @@ Loader::~Loader()
delete d;
}
+// FIXME! Clients need to be released when document is completely loaded.
+static NSMutableDictionary *clientForDocument = 0;
+
void Loader::load(CachedObject *object, const DOMString &baseURL, bool incremental)
{
+ // All loads associated with a particular baseURL should share the same
+ // URLHandleClient.
+ id client;
+
+ if (clientForDocument == 0)
+ clientForDocument = [[NSMutableDictionary alloc] init];
+
+ // FIXME! We need to remove cached clients when data source goes away.
+ id dataSource = ((KHTMLPart *)(((DocLoader *)(object->loader()))->part()))->getDataSource();
+ NSNumber *key = [NSNumber numberWithUnsignedInt: (unsigned int)dataSource];
+ client = [clientForDocument objectForKey: key];
+ if (client == nil){
+ KWQDEBUGLEVEL2 (0x2000, "Creating client for dataSource 0x%08x, url %s\n", dataSource, baseURL.string().latin1());
+ client = [[[URLLoadClient alloc] initWithLoader:this dataSource: dataSource] autorelease];
+ [clientForDocument setObject: client forKey: key];
+ }
+
Request *req = new Request(object, baseURL, incremental);
+ req->client = client;
m_requestsPending.append(req);
servePendingRequests();
@@ -1021,9 +1090,15 @@ void Loader::servePendingRequests()
#endif
#ifdef _KWQ_
+ KWQDEBUGLEVEL2 (0x2000, "Serving request for base %s, url %s\n",
+ req->m_baseURL.string().latin1(), req->object->url().string().latin1());
+
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
m_requestsLoading.insert(job, req);
- job->begin(d->m_recv, job);
+
+ //job->begin(d->m_recv, job);
+ job->begin((URLLoadClient *)req->client, job);
+
#else
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
@@ -1275,7 +1350,7 @@ CachedImage *Cache::requestImage( const DocLoader* dl, const DOMString & url, co
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedImage *im = new CachedImage(kurl.url(), baseUrl, reload, _expireDate);
+ CachedImage *im = new CachedImage(dl, kurl.url(), baseUrl, reload, _expireDate);
if ( dl && dl->autoloadImages() ) Cache::loader()->load(im, im->baseURL(), true);
cache->insert( kurl.url(), im );
lru->append( kurl.url() );
@@ -1324,7 +1399,7 @@ CachedCSSStyleSheet *Cache::requestStyleSheet( const DocLoader* dl, const DOMStr
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), sheet );
lru->append( kurl.url() );
flush();
@@ -1372,7 +1447,7 @@ CachedScript *Cache::requestScript( const DocLoader* dl, const DOM::DOMString &u
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedScript *script = new CachedScript(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedScript *script = new CachedScript(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), script );
lru->append( kurl.url() );
flush();
diff --git a/WebCore/kwq/KWQLoader.mm b/WebCore/kwq/KWQLoader.mm
index f576eef..b30632b 100644
--- a/WebCore/kwq/KWQLoader.mm
+++ b/WebCore/kwq/KWQLoader.mm
@@ -101,8 +101,8 @@ void CachedObject::setRequest(Request *_request)
// -------------------------------------------------------------------------------------------
-CachedCSSStyleSheet::CachedCSSStyleSheet(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, CSSStyleSheet, reload, _expireDate)
+CachedCSSStyleSheet::CachedCSSStyleSheet(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, CSSStyleSheet, reload, _expireDate)
{
// It's css we want.
setAccept( QString::fromLatin1("text/css") );
@@ -167,8 +167,8 @@ void CachedCSSStyleSheet::error( int /*err*/, const char */*text*/ )
// -------------------------------------------------------------------------------------------
-CachedScript::CachedScript(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, Script, reload, _expireDate)
+CachedScript::CachedScript(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, Script, reload, _expireDate)
{
// It's javascript we want.
setAccept( QString::fromLatin1("application/x-javascript") );
@@ -381,8 +381,8 @@ static QString buildAcceptHeader()
// -------------------------------------------------------------------------------------
-CachedImage::CachedImage(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
- : QObject(), CachedObject(url, Image, reload, _expireDate)
+CachedImage::CachedImage(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
+ : QObject(), CachedObject(loader, url, Image, reload, _expireDate)
{
static const QString &acceptHeader = KGlobal::staticQString( buildAcceptHeader() );
@@ -906,21 +906,50 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
{
@public
Loader *m_loader;
- NSData *m_data;
+ id m_dataSource;
}
--(id)initWithLoader:(Loader *)loader;
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource;
@end
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
+{
+ int bytesSoFar; // 0 if this is the start of load
+ int totalToLoad; // -1 if this is not known.
+ // bytesSoFar == totalLoaded when complete
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
+}
+- init;
+ at end
+
+ at class IFError;
+
+ at protocol IFLoadHandler
+- (void)receivedProgress: (IFLoadProgress *)progress forResource: (NSString *)resourceDescription fromDataSource: (IFWebDataSource *)dataSource;
+
+- (void)receivedError: (IFError *)error forResource: (NSString *)resourceDescription partialProgress: (IFLoadProgress *)progress fromDataSource: (IFWebDataSource *)dataSource;
+
+ at end
+
+ at interface IFWebDataSource
+- controller;
+ at end
+
@implementation URLLoadClient
--(id)initWithLoader:(Loader *)loader
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource
{
if ((self = [super init])) {
m_loader = loader;
- m_data = nil;
-
+ m_dataSource = dataSource;
return self;
}
@@ -929,38 +958,57 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
- KIO::Job *job = static_cast<KIO::Job *>(userData);
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, urlString.latin1());
m_loader->slotFinished(job);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = 0;
+ loadProgress->bytesSoFar = 0;
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
- if (!m_data) {
- m_data = [data retain];
- }
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL4 (0x2000, "dataSource = 0x%08x for URL %s data at 0x%08x, length %d\n", m_dataSource, urlString.latin1(), data, [data length]);
- KIO::Job *job = static_cast<KIO::Job *>(userData);
m_loader->slotData(job, (const char *)[data bytes], [data length]);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = -1;
+ loadProgress->bytesSoFar = [data length];
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
--(void)dealloc
-{
- [m_data release];
-
- [super dealloc];
-}
@end
@@ -973,17 +1021,17 @@ public:
LoaderPrivate(Loader *parent)
{
_parent = parent;
- m_recv = [[URLLoadClient alloc] initWithLoader:parent];
+ //m_recv = [[URLLoadClient alloc] initWithLoader:parent dataSource: nil];
}
~LoaderPrivate()
{
- [m_recv autorelease];
+ //[m_recv autorelease];
}
private:
Loader *_parent;
- URLLoadClient *m_recv;
+ //URLLoadClient *m_recv;
};
} // namespace khtml
@@ -1000,9 +1048,30 @@ Loader::~Loader()
delete d;
}
+// FIXME! Clients need to be released when document is completely loaded.
+static NSMutableDictionary *clientForDocument = 0;
+
void Loader::load(CachedObject *object, const DOMString &baseURL, bool incremental)
{
+ // All loads associated with a particular baseURL should share the same
+ // URLHandleClient.
+ id client;
+
+ if (clientForDocument == 0)
+ clientForDocument = [[NSMutableDictionary alloc] init];
+
+ // FIXME! We need to remove cached clients when data source goes away.
+ id dataSource = ((KHTMLPart *)(((DocLoader *)(object->loader()))->part()))->getDataSource();
+ NSNumber *key = [NSNumber numberWithUnsignedInt: (unsigned int)dataSource];
+ client = [clientForDocument objectForKey: key];
+ if (client == nil){
+ KWQDEBUGLEVEL2 (0x2000, "Creating client for dataSource 0x%08x, url %s\n", dataSource, baseURL.string().latin1());
+ client = [[[URLLoadClient alloc] initWithLoader:this dataSource: dataSource] autorelease];
+ [clientForDocument setObject: client forKey: key];
+ }
+
Request *req = new Request(object, baseURL, incremental);
+ req->client = client;
m_requestsPending.append(req);
servePendingRequests();
@@ -1021,9 +1090,15 @@ void Loader::servePendingRequests()
#endif
#ifdef _KWQ_
+ KWQDEBUGLEVEL2 (0x2000, "Serving request for base %s, url %s\n",
+ req->m_baseURL.string().latin1(), req->object->url().string().latin1());
+
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
m_requestsLoading.insert(job, req);
- job->begin(d->m_recv, job);
+
+ //job->begin(d->m_recv, job);
+ job->begin((URLLoadClient *)req->client, job);
+
#else
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
@@ -1275,7 +1350,7 @@ CachedImage *Cache::requestImage( const DocLoader* dl, const DOMString & url, co
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedImage *im = new CachedImage(kurl.url(), baseUrl, reload, _expireDate);
+ CachedImage *im = new CachedImage(dl, kurl.url(), baseUrl, reload, _expireDate);
if ( dl && dl->autoloadImages() ) Cache::loader()->load(im, im->baseURL(), true);
cache->insert( kurl.url(), im );
lru->append( kurl.url() );
@@ -1324,7 +1399,7 @@ CachedCSSStyleSheet *Cache::requestStyleSheet( const DocLoader* dl, const DOMStr
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), sheet );
lru->append( kurl.url() );
flush();
@@ -1372,7 +1447,7 @@ CachedScript *Cache::requestScript( const DocLoader* dl, const DOM::DOMString &u
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedScript *script = new CachedScript(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedScript *script = new CachedScript(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), script );
lru->append( kurl.url() );
flush();
diff --git a/WebCore/kwq/KWQLoaderImpl.mm b/WebCore/kwq/KWQLoaderImpl.mm
index f576eef..b30632b 100644
--- a/WebCore/kwq/KWQLoaderImpl.mm
+++ b/WebCore/kwq/KWQLoaderImpl.mm
@@ -101,8 +101,8 @@ void CachedObject::setRequest(Request *_request)
// -------------------------------------------------------------------------------------------
-CachedCSSStyleSheet::CachedCSSStyleSheet(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, CSSStyleSheet, reload, _expireDate)
+CachedCSSStyleSheet::CachedCSSStyleSheet(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, CSSStyleSheet, reload, _expireDate)
{
// It's css we want.
setAccept( QString::fromLatin1("text/css") );
@@ -167,8 +167,8 @@ void CachedCSSStyleSheet::error( int /*err*/, const char */*text*/ )
// -------------------------------------------------------------------------------------------
-CachedScript::CachedScript(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, Script, reload, _expireDate)
+CachedScript::CachedScript(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, Script, reload, _expireDate)
{
// It's javascript we want.
setAccept( QString::fromLatin1("application/x-javascript") );
@@ -381,8 +381,8 @@ static QString buildAcceptHeader()
// -------------------------------------------------------------------------------------
-CachedImage::CachedImage(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
- : QObject(), CachedObject(url, Image, reload, _expireDate)
+CachedImage::CachedImage(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
+ : QObject(), CachedObject(loader, url, Image, reload, _expireDate)
{
static const QString &acceptHeader = KGlobal::staticQString( buildAcceptHeader() );
@@ -906,21 +906,50 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
{
@public
Loader *m_loader;
- NSData *m_data;
+ id m_dataSource;
}
--(id)initWithLoader:(Loader *)loader;
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource;
@end
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
+{
+ int bytesSoFar; // 0 if this is the start of load
+ int totalToLoad; // -1 if this is not known.
+ // bytesSoFar == totalLoaded when complete
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
+}
+- init;
+ at end
+
+ at class IFError;
+
+ at protocol IFLoadHandler
+- (void)receivedProgress: (IFLoadProgress *)progress forResource: (NSString *)resourceDescription fromDataSource: (IFWebDataSource *)dataSource;
+
+- (void)receivedError: (IFError *)error forResource: (NSString *)resourceDescription partialProgress: (IFLoadProgress *)progress fromDataSource: (IFWebDataSource *)dataSource;
+
+ at end
+
+ at interface IFWebDataSource
+- controller;
+ at end
+
@implementation URLLoadClient
--(id)initWithLoader:(Loader *)loader
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource
{
if ((self = [super init])) {
m_loader = loader;
- m_data = nil;
-
+ m_dataSource = dataSource;
return self;
}
@@ -929,38 +958,57 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
- KIO::Job *job = static_cast<KIO::Job *>(userData);
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, urlString.latin1());
m_loader->slotFinished(job);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = 0;
+ loadProgress->bytesSoFar = 0;
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
- if (!m_data) {
- m_data = [data retain];
- }
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL4 (0x2000, "dataSource = 0x%08x for URL %s data at 0x%08x, length %d\n", m_dataSource, urlString.latin1(), data, [data length]);
- KIO::Job *job = static_cast<KIO::Job *>(userData);
m_loader->slotData(job, (const char *)[data bytes], [data length]);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = -1;
+ loadProgress->bytesSoFar = [data length];
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
--(void)dealloc
-{
- [m_data release];
-
- [super dealloc];
-}
@end
@@ -973,17 +1021,17 @@ public:
LoaderPrivate(Loader *parent)
{
_parent = parent;
- m_recv = [[URLLoadClient alloc] initWithLoader:parent];
+ //m_recv = [[URLLoadClient alloc] initWithLoader:parent dataSource: nil];
}
~LoaderPrivate()
{
- [m_recv autorelease];
+ //[m_recv autorelease];
}
private:
Loader *_parent;
- URLLoadClient *m_recv;
+ //URLLoadClient *m_recv;
};
} // namespace khtml
@@ -1000,9 +1048,30 @@ Loader::~Loader()
delete d;
}
+// FIXME! Clients need to be released when document is completely loaded.
+static NSMutableDictionary *clientForDocument = 0;
+
void Loader::load(CachedObject *object, const DOMString &baseURL, bool incremental)
{
+ // All loads associated with a particular baseURL should share the same
+ // URLHandleClient.
+ id client;
+
+ if (clientForDocument == 0)
+ clientForDocument = [[NSMutableDictionary alloc] init];
+
+ // FIXME! We need to remove cached clients when data source goes away.
+ id dataSource = ((KHTMLPart *)(((DocLoader *)(object->loader()))->part()))->getDataSource();
+ NSNumber *key = [NSNumber numberWithUnsignedInt: (unsigned int)dataSource];
+ client = [clientForDocument objectForKey: key];
+ if (client == nil){
+ KWQDEBUGLEVEL2 (0x2000, "Creating client for dataSource 0x%08x, url %s\n", dataSource, baseURL.string().latin1());
+ client = [[[URLLoadClient alloc] initWithLoader:this dataSource: dataSource] autorelease];
+ [clientForDocument setObject: client forKey: key];
+ }
+
Request *req = new Request(object, baseURL, incremental);
+ req->client = client;
m_requestsPending.append(req);
servePendingRequests();
@@ -1021,9 +1090,15 @@ void Loader::servePendingRequests()
#endif
#ifdef _KWQ_
+ KWQDEBUGLEVEL2 (0x2000, "Serving request for base %s, url %s\n",
+ req->m_baseURL.string().latin1(), req->object->url().string().latin1());
+
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
m_requestsLoading.insert(job, req);
- job->begin(d->m_recv, job);
+
+ //job->begin(d->m_recv, job);
+ job->begin((URLLoadClient *)req->client, job);
+
#else
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
@@ -1275,7 +1350,7 @@ CachedImage *Cache::requestImage( const DocLoader* dl, const DOMString & url, co
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedImage *im = new CachedImage(kurl.url(), baseUrl, reload, _expireDate);
+ CachedImage *im = new CachedImage(dl, kurl.url(), baseUrl, reload, _expireDate);
if ( dl && dl->autoloadImages() ) Cache::loader()->load(im, im->baseURL(), true);
cache->insert( kurl.url(), im );
lru->append( kurl.url() );
@@ -1324,7 +1399,7 @@ CachedCSSStyleSheet *Cache::requestStyleSheet( const DocLoader* dl, const DOMStr
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), sheet );
lru->append( kurl.url() );
flush();
@@ -1372,7 +1447,7 @@ CachedScript *Cache::requestScript( const DocLoader* dl, const DOM::DOMString &u
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedScript *script = new CachedScript(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedScript *script = new CachedScript(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), script );
lru->append( kurl.url() );
flush();
diff --git a/WebCore/kwq/kio/jobclasses.h b/WebCore/kwq/kio/jobclasses.h
index 169bee3..bd1069f 100644
--- a/WebCore/kwq/kio/jobclasses.h
+++ b/WebCore/kwq/kio/jobclasses.h
@@ -172,8 +172,10 @@ public:
#else
void begin(void *requestor, void *userData);
#endif
+ KURL url() { return _url; }
#endif
+
// operators ---------------------------------------------------------------
// protected -------------------------------------------------------------------
diff --git a/WebCore/src/kdelibs/khtml/misc/loader.h b/WebCore/src/kdelibs/khtml/misc/loader.h
index fd25e47..ec7edf0 100644
--- a/WebCore/src/kdelibs/khtml/misc/loader.h
+++ b/WebCore/src/kdelibs/khtml/misc/loader.h
@@ -67,6 +67,7 @@ namespace khtml
class CachedObject;
class Request;
class LoaderPrivate;
+ class DocLoader;
/**
* @internal
@@ -95,8 +96,9 @@ namespace khtml
Uncacheable // to big to be cached,
}; // will be destroyed as soon as possible
- CachedObject(const DOM::DOMString &url, Type type, bool _reload, int _expireDate)
+ CachedObject(const DocLoader *loader, const DOM::DOMString &url, Type type, bool _reload, int _expireDate)
{
+ m_loader = loader;
m_url = url;
m_type = type;
m_status = Pending;
@@ -105,12 +107,12 @@ namespace khtml
m_reload = _reload;
m_request = 0;
m_expireDate = _expireDate;
- m_deleted = false;
+ m_deleted = false;
}
virtual ~CachedObject() {
- if(m_deleted) abort();
+ if(m_deleted) abort();
m_deleted = true;
- }
+ }
virtual void data( QBuffer &buffer, bool eof) = 0;
virtual void error( int err, const char *text ) = 0;
@@ -135,41 +137,47 @@ namespace khtml
*/
void finish();
- /*
- * Called by the cache if the object has been removed from the cache dict
- * while still being referenced. This means the object should kill itself
- * if its reference counter drops down to zero.
- */
- void setFree( bool b ) { m_free = b; }
-
- bool reload() const { return m_reload; }
-
- void setRequest(Request *_request);
-
- bool canDelete() const { return (m_clients.count() == 0 && !m_request); }
+ /*
+ * Called by the cache if the object has been removed from the cache dict
+ * while still being referenced. This means the object should kill itself
+ * if its reference counter drops down to zero.
+ */
+ void setFree( bool b ) { m_free = b; }
+
+ bool reload() const { return m_reload; }
+
+ void setRequest(Request *_request);
+
+ bool canDelete() const { return (m_clients.count() == 0 && !m_request); }
void setExpireDate(int _expireDate);
- /*
- * List of acceptable mimetypes seperated by ",". A mimetype may contain a wildcard.
- */
- // e.g. "text/*"
- QString accept() const { return m_accept; }
- void setAccept(const QString &_accept) { m_accept = _accept; }
+ /*
+ * List of acceptable mimetypes seperated by ",". A mimetype may contain a wildcard.
+ */
+ // e.g. "text/*"
+ QString accept() const { return m_accept; }
+ void setAccept(const QString &_accept) { m_accept = _accept; }
+
+ const DocLoader *loader() { return m_loader; }
+
protected:
- QList<CachedObjectClient> m_clients;
+
+ const DocLoader *m_loader;
+
+ QList<CachedObjectClient> m_clients;
DOM::DOMString m_url;
- QString m_accept;
- Request *m_request;
+ QString m_accept;
+ Request *m_request;
Type m_type;
Status m_status;
int m_size;
int m_expireDate;
- bool m_free;
- bool m_reload;
- bool m_deleted;
+ bool m_free;
+ bool m_reload;
+ bool m_deleted;
};
@@ -179,7 +187,7 @@ namespace khtml
class CachedCSSStyleSheet : public CachedObject
{
public:
- CachedCSSStyleSheet(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
+ CachedCSSStyleSheet(const DocLoader *loader, const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
virtual ~CachedCSSStyleSheet();
const DOM::DOMString &sheet() const { return m_sheet; }
@@ -204,7 +212,7 @@ namespace khtml
class CachedScript : public CachedObject
{
public:
- CachedScript(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
+ CachedScript(const DocLoader *loader, const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);
virtual ~CachedScript();
const DOM::DOMString &script() const { return m_script; }
@@ -232,7 +240,7 @@ namespace khtml
{
Q_OBJECT
public:
- CachedImage(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate);
+ CachedImage(const DocLoader *loader, const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate);
virtual ~CachedImage();
const QPixmap &pixmap() const;
@@ -314,6 +322,7 @@ namespace khtml
void setReloading( bool );
void setShowAnimations( bool );
void removeCachedObject( CachedObject*) const;
+ const KHTMLPart *part() { return m_part; }
private:
friend class Cache;
@@ -340,6 +349,9 @@ namespace khtml
QBuffer m_buffer;
CachedObject *object;
DOM::DOMString m_baseURL;
+#ifdef _KWQ_
+ void *client;
+#endif
};
/**
diff --git a/WebCore/src/kwq/KWQKHTMLPart.mm b/WebCore/src/kwq/KWQKHTMLPart.mm
index c6a5359..98441bc 100644
--- a/WebCore/src/kwq/KWQKHTMLPart.mm
+++ b/WebCore/src/kwq/KWQKHTMLPart.mm
@@ -139,19 +139,23 @@ static void recursive(const DOM::Node &pNode, const DOM::Node &node)
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
+ KWQDEBUGLEVEL1 (0x2000, "userData = 0x%08x\n", userData);
m_part->closeURL();
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
+ KWQDEBUGLEVEL3 (0x2000, "userData = 0x%08x, data = 0x%08x, length %d\n", userData, data, [data length]);
if (!m_data) {
m_data = [data retain];
}
@@ -160,6 +164,7 @@ static void recursive(const DOM::Node &pNode, const DOM::Node &node)
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KWQDEBUGLEVEL2 (0x2000, "result = %d, userData = 0x%08x\n", result, userData);
}
@@ -395,7 +400,7 @@ bool KHTMLPart::openURL( const KURL &url )
urlString = [NSString stringWithCString:d->m_workingURL.url().latin1()];
// FIXME: temporary hack to make file: URLs work right
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
@@ -426,7 +431,7 @@ bool KHTMLPart::closeURL()
urlString = [NSString stringWithCString:d->m_url.url().latin1()];
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
@@ -581,8 +586,6 @@ bool KHTMLPart::onlyLocalReferences() const
}
-
-
void KHTMLPart::begin( const KURL &url, int xOffset, int yOffset)
{
//d->m_referrer = url.url();
@@ -683,7 +686,9 @@ void KHTMLPart::write(const char *str, int len)
double start = CFAbsoluteTimeGetCurrent();
#endif
- // FIX ME: This is very expensive.
+ // FIX ME: This is very expensive. We should using the IFMutableData
+ // that represents the document, and only constructing the complete
+ // string when requested.
d->m_documentSource += QString(str, len);
QString decoded;
@@ -699,6 +704,8 @@ void KHTMLPart::write(const char *str, int len)
d->m_decodingStarted = 1;
+ // Transition from provisional to committed data source at this point.
+
d->m_doc->applyChanges(true, true);
// end lines added in lieu of big fixme
@@ -1782,11 +1789,11 @@ void KHTMLPart::checkCompleted()
NSString *urlString;
urlString = [NSString stringWithCString:d->m_url.url().latin1()];
if ([urlString hasPrefix:@"file:/"] && [urlString characterAtIndex:6] != '/') {
- urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
+ urlString = [@"file:///" stringByAppendingString:[urlString substringFromIndex:6]];
}
if ([urlString hasSuffix:@"/"]) {
- urlString = [urlString substringToIndex:([urlString length] - 1)];
+ urlString = [urlString substringToIndex:([urlString length] - 1)];
}
// Still waiting for images/scripts from the loader ?
diff --git a/WebCore/src/kwq/KWQKloader.mm b/WebCore/src/kwq/KWQKloader.mm
index f576eef..b30632b 100644
--- a/WebCore/src/kwq/KWQKloader.mm
+++ b/WebCore/src/kwq/KWQKloader.mm
@@ -101,8 +101,8 @@ void CachedObject::setRequest(Request *_request)
// -------------------------------------------------------------------------------------------
-CachedCSSStyleSheet::CachedCSSStyleSheet(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, CSSStyleSheet, reload, _expireDate)
+CachedCSSStyleSheet::CachedCSSStyleSheet(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, CSSStyleSheet, reload, _expireDate)
{
// It's css we want.
setAccept( QString::fromLatin1("text/css") );
@@ -167,8 +167,8 @@ void CachedCSSStyleSheet::error( int /*err*/, const char */*text*/ )
// -------------------------------------------------------------------------------------------
-CachedScript::CachedScript(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
- : CachedObject(url, Script, reload, _expireDate)
+CachedScript::CachedScript(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate, const QString& charset)
+ : CachedObject(loader, url, Script, reload, _expireDate)
{
// It's javascript we want.
setAccept( QString::fromLatin1("application/x-javascript") );
@@ -381,8 +381,8 @@ static QString buildAcceptHeader()
// -------------------------------------------------------------------------------------
-CachedImage::CachedImage(const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
- : QObject(), CachedObject(url, Image, reload, _expireDate)
+CachedImage::CachedImage(const DocLoader *loader, const DOMString &url, const DOMString &baseURL, bool reload, int _expireDate)
+ : QObject(), CachedObject(loader, url, Image, reload, _expireDate)
{
static const QString &acceptHeader = KGlobal::staticQString( buildAcceptHeader() );
@@ -906,21 +906,50 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
{
@public
Loader *m_loader;
- NSData *m_data;
+ id m_dataSource;
}
--(id)initWithLoader:(Loader *)loader;
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource;
@end
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
+{
+ int bytesSoFar; // 0 if this is the start of load
+ int totalToLoad; // -1 if this is not known.
+ // bytesSoFar == totalLoaded when complete
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
+}
+- init;
+ at end
+
+ at class IFError;
+
+ at protocol IFLoadHandler
+- (void)receivedProgress: (IFLoadProgress *)progress forResource: (NSString *)resourceDescription fromDataSource: (IFWebDataSource *)dataSource;
+
+- (void)receivedError: (IFError *)error forResource: (NSString *)resourceDescription partialProgress: (IFLoadProgress *)progress fromDataSource: (IFWebDataSource *)dataSource;
+
+ at end
+
+ at interface IFWebDataSource
+- controller;
+ at end
+
@implementation URLLoadClient
--(id)initWithLoader:(Loader *)loader
+-(id)initWithLoader:(Loader *)loader dataSource: dataSource
{
if ((self = [super init])) {
m_loader = loader;
- m_data = nil;
-
+ m_dataSource = dataSource;
return self;
}
@@ -929,38 +958,57 @@ void DocLoader::removeCachedObject( CachedObject* o ) const
- (void)WCURLHandleResourceDidBeginLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidCancelLoading:(id)sender userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
- (void)WCURLHandleResourceDidFinishLoading:(id)sender userData:(void *)userData
{
- KIO::Job *job = static_cast<KIO::Job *>(userData);
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, urlString.latin1());
m_loader->slotFinished(job);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = 0;
+ loadProgress->bytesSoFar = 0;
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDataDidBecomeAvailable:(NSData *)data userData:(void *)userData
{
- if (!m_data) {
- m_data = [data retain];
- }
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ QString urlString = job->url().url();
+
+ KWQDEBUGLEVEL4 (0x2000, "dataSource = 0x%08x for URL %s data at 0x%08x, length %d\n", m_dataSource, urlString.latin1(), data, [data length]);
- KIO::Job *job = static_cast<KIO::Job *>(userData);
m_loader->slotData(job, (const char *)[data bytes], [data length]);
+
+ id <IFLoadHandler> controller;
+
+ controller = [m_dataSource controller];
+ IFLoadProgress *loadProgress = [[[IFLoadProgress alloc] init] autorelease];
+ loadProgress->totalToLoad = -1;
+ loadProgress->bytesSoFar = [data length];
+ [controller receivedProgress: (IFLoadProgress *)loadProgress forResource: QSTRING_TO_NSSTRING(urlString) fromDataSource: m_dataSource];
}
- (void)WCURLHandle:(id)sender resourceDidFailLoadingWithResult:(int)result userData:(void *)userData
{
+ KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
+ KWQDEBUGLEVEL2 (0x2000, "dataSource = 0x%08x for URL %s\n", m_dataSource, job->url().url().latin1());
}
--(void)dealloc
-{
- [m_data release];
-
- [super dealloc];
-}
@end
@@ -973,17 +1021,17 @@ public:
LoaderPrivate(Loader *parent)
{
_parent = parent;
- m_recv = [[URLLoadClient alloc] initWithLoader:parent];
+ //m_recv = [[URLLoadClient alloc] initWithLoader:parent dataSource: nil];
}
~LoaderPrivate()
{
- [m_recv autorelease];
+ //[m_recv autorelease];
}
private:
Loader *_parent;
- URLLoadClient *m_recv;
+ //URLLoadClient *m_recv;
};
} // namespace khtml
@@ -1000,9 +1048,30 @@ Loader::~Loader()
delete d;
}
+// FIXME! Clients need to be released when document is completely loaded.
+static NSMutableDictionary *clientForDocument = 0;
+
void Loader::load(CachedObject *object, const DOMString &baseURL, bool incremental)
{
+ // All loads associated with a particular baseURL should share the same
+ // URLHandleClient.
+ id client;
+
+ if (clientForDocument == 0)
+ clientForDocument = [[NSMutableDictionary alloc] init];
+
+ // FIXME! We need to remove cached clients when data source goes away.
+ id dataSource = ((KHTMLPart *)(((DocLoader *)(object->loader()))->part()))->getDataSource();
+ NSNumber *key = [NSNumber numberWithUnsignedInt: (unsigned int)dataSource];
+ client = [clientForDocument objectForKey: key];
+ if (client == nil){
+ KWQDEBUGLEVEL2 (0x2000, "Creating client for dataSource 0x%08x, url %s\n", dataSource, baseURL.string().latin1());
+ client = [[[URLLoadClient alloc] initWithLoader:this dataSource: dataSource] autorelease];
+ [clientForDocument setObject: client forKey: key];
+ }
+
Request *req = new Request(object, baseURL, incremental);
+ req->client = client;
m_requestsPending.append(req);
servePendingRequests();
@@ -1021,9 +1090,15 @@ void Loader::servePendingRequests()
#endif
#ifdef _KWQ_
+ KWQDEBUGLEVEL2 (0x2000, "Serving request for base %s, url %s\n",
+ req->m_baseURL.string().latin1(), req->object->url().string().latin1());
+
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
m_requestsLoading.insert(job, req);
- job->begin(d->m_recv, job);
+
+ //job->begin(d->m_recv, job);
+ job->begin((URLLoadClient *)req->client, job);
+
#else
KIO::TransferJob* job = KIO::get( req->object->url().string(), req->object->reload(), false /*no GUI*/);
@@ -1275,7 +1350,7 @@ CachedImage *Cache::requestImage( const DocLoader* dl, const DOMString & url, co
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedImage *im = new CachedImage(kurl.url(), baseUrl, reload, _expireDate);
+ CachedImage *im = new CachedImage(dl, kurl.url(), baseUrl, reload, _expireDate);
if ( dl && dl->autoloadImages() ) Cache::loader()->load(im, im->baseURL(), true);
cache->insert( kurl.url(), im );
lru->append( kurl.url() );
@@ -1324,7 +1399,7 @@ CachedCSSStyleSheet *Cache::requestStyleSheet( const DocLoader* dl, const DOMStr
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), sheet );
lru->append( kurl.url() );
flush();
@@ -1372,7 +1447,7 @@ CachedScript *Cache::requestScript( const DocLoader* dl, const DOM::DOMString &u
#ifdef CACHE_DEBUG
kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
#endif
- CachedScript *script = new CachedScript(kurl.url(), baseUrl, reload, _expireDate, charset);
+ CachedScript *script = new CachedScript(dl, kurl.url(), baseUrl, reload, _expireDate, charset);
cache->insert( kurl.url(), script );
lru->append( kurl.url() );
flush();
diff --git a/WebCore/src/kwq/kio/jobclasses.h b/WebCore/src/kwq/kio/jobclasses.h
index 169bee3..bd1069f 100644
--- a/WebCore/src/kwq/kio/jobclasses.h
+++ b/WebCore/src/kwq/kio/jobclasses.h
@@ -172,8 +172,10 @@ public:
#else
void begin(void *requestor, void *userData);
#endif
+ KURL url() { return _url; }
#endif
+
// operators ---------------------------------------------------------------
// protected -------------------------------------------------------------------
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 4141aef..da814cf 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,20 @@
+2002-02-20 Richard Williamson <rjw at apple.com>
+
+ Some groundwork to bring WebFoundation callbacks up to
+ WebKit.
+
+ * WebView.subproj/IFBaseWebController.mm: (-[IFLoadProgress init]),
+ (-[IFBaseWebController receivedProgress:forResource:fromDataSource:]),
+ (-[IFBaseWebController
+ receivedError:forResource:partialProgress:fromDataSource:]),
+ (-[IFBaseWebController _changeFrame:dataSource:]):
+ * WebView.subproj/IFWebController.h:
+ * WebView.subproj/IFWebDataSource.mm: (-[IFWebDataSource stopLoading]):
+ * WebView.subproj/IFWebFrame.h:
+ * WebView.subproj/IFWebFramePrivate.h:
+ * WebView.subproj/IFWebFramePrivate.mm: (-[IFWebFramePrivate
+ setProvisionalDataSource:]):
+
2002-02-20 Maciej Stachowiak <mjs at apple.com>
* WebView.subproj/IFWebController.h: Fix my WebController screw-up.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index 4141aef..da814cf 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,20 @@
+2002-02-20 Richard Williamson <rjw at apple.com>
+
+ Some groundwork to bring WebFoundation callbacks up to
+ WebKit.
+
+ * WebView.subproj/IFBaseWebController.mm: (-[IFLoadProgress init]),
+ (-[IFBaseWebController receivedProgress:forResource:fromDataSource:]),
+ (-[IFBaseWebController
+ receivedError:forResource:partialProgress:fromDataSource:]),
+ (-[IFBaseWebController _changeFrame:dataSource:]):
+ * WebView.subproj/IFWebController.h:
+ * WebView.subproj/IFWebDataSource.mm: (-[IFWebDataSource stopLoading]):
+ * WebView.subproj/IFWebFrame.h:
+ * WebView.subproj/IFWebFramePrivate.h:
+ * WebView.subproj/IFWebFramePrivate.mm: (-[IFWebFramePrivate
+ setProvisionalDataSource:]):
+
2002-02-20 Maciej Stachowiak <mjs at apple.com>
* WebView.subproj/IFWebController.h: Fix my WebController screw-up.
diff --git a/WebKit/WebView.subproj/IFBaseWebController.mm b/WebKit/WebView.subproj/IFBaseWebController.mm
index 558552e..a19c848 100644
--- a/WebKit/WebView.subproj/IFBaseWebController.mm
+++ b/WebKit/WebView.subproj/IFBaseWebController.mm
@@ -68,6 +68,14 @@
@end
+ at implementation IFLoadProgress
+- init
+{
+ return [super init];
+}
+
+ at end
+
@implementation IFBaseWebController
@@ -227,13 +235,14 @@
// ---------------------------------------------------------------------
- (void)receivedProgress: (IFLoadProgress *)progress forResource: (NSString *)resourceDescription fromDataSource: (IFWebDataSource *)dataSource
{
- [NSException raise:IFMethodNotYetImplemented format:@"IFBaseWebController::receivedProgress:forResource:fromDataSource: is not implemented"];
+ // Do nothing.
}
+
- (void)receivedError: (IFError *)error forResource: (NSString *)resourceDescription partialProgress: (IFLoadProgress *)progress fromDataSource: (IFWebDataSource *)dataSource
{
- [NSException raise:IFMethodNotYetImplemented format:@"IFBaseWebController::receivedError:forResource:partialProgress:fromDataSource: is not implemented"];
+ // FIXME?
}
@@ -272,6 +281,8 @@
[newDataSource _setController: self];
[frame setDataSource: newDataSource];
+ // dataSourceChanged: will reset the view and begin trying to
+ // display the new new datasource.
[[frame view] dataSourceChanged: newDataSource];
// This introduces a nasty dependency on the view.
diff --git a/WebKit/WebView.subproj/IFWebController.h b/WebKit/WebView.subproj/IFWebController.h
index 7ab880a..80bbb54 100644
--- a/WebKit/WebView.subproj/IFWebController.h
+++ b/WebKit/WebView.subproj/IFWebController.h
@@ -121,14 +121,19 @@
A IFLoadProgress capture the state associated with a load progress
indication. Should we use a struct?
*/
- at interface IFLoadProgress
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
{
int bytesSoFar; // 0 if this is the start of load
int totalToLoad; // -1 if this is not known.
// bytesSoFar == totalLoaded when complete
-#ifdef TENTATIVE_API
- IF_LOAD_TYPES type; // load types, either image, css, jscript, or html
-#endif
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
}
@end
diff --git a/WebKit/WebView.subproj/IFWebDataSource.mm b/WebKit/WebView.subproj/IFWebDataSource.mm
index 9a8577a..b5f5278 100644
--- a/WebKit/WebView.subproj/IFWebDataSource.mm
+++ b/WebKit/WebView.subproj/IFWebDataSource.mm
@@ -231,7 +231,7 @@
// Returns NO if the data source is not currently loading.
- (void)stopLoading
{
- [NSException raise:IFMethodNotYetImplemented format:@"IFWebDataSource::stopLoading is not implemented"];
+ [self _part]->closeURL ();
}
diff --git a/WebKit/WebView.subproj/IFWebFrame.h b/WebKit/WebView.subproj/IFWebFrame.h
index 049e8f2..5bfb9d2 100644
--- a/WebKit/WebView.subproj/IFWebFrame.h
+++ b/WebKit/WebView.subproj/IFWebFrame.h
@@ -19,9 +19,19 @@
- (NSString *)name;
- (void)setView: view;
- view;
+
+/*
+ Sets the frame's data source. Note that the data source will be
+ considered 'provisional' until it has been loaded, and at least
+ ~some~ data has been received.
+*/
- (void)setDataSource: (IFWebDataSource *)ds;
- (IFWebDataSource *)dataSource;
+- (IFWebDataSource *)provisionalDataSource;
+
+
+
- (void)reset;
// private
diff --git a/WebKit/WebView.subproj/IFWebFramePrivate.h b/WebKit/WebView.subproj/IFWebFramePrivate.h
index a43ae5e..2b1f93b 100644
--- a/WebKit/WebView.subproj/IFWebFramePrivate.h
+++ b/WebKit/WebView.subproj/IFWebFramePrivate.h
@@ -15,6 +15,7 @@
NSString *name;
id view;
IFWebDataSource *dataSource;
+ IFWebDataSource *provisionalDataSource;
void *renderFramePart;
}
diff --git a/WebKit/WebView.subproj/IFWebFramePrivate.mm b/WebKit/WebView.subproj/IFWebFramePrivate.mm
index c197c37..73c2a8d 100644
--- a/WebKit/WebView.subproj/IFWebFramePrivate.mm
+++ b/WebKit/WebView.subproj/IFWebFramePrivate.mm
@@ -39,6 +39,14 @@
}
+- (IFWebDataSource *)provisionalDataSource { return provisionalDataSource; }
+- (void)setProvisionalDataSource: (IFWebDataSource *)d
+{
+ [provisionalDataSource autorelease];
+ provisionalDataSource = [d retain];
+}
+
+
- (void *)renderFramePart { return renderFramePart; }
- (void)setRenderFramePart: (void *)p
{
diff --git a/WebKit/WebView.subproj/WebController.h b/WebKit/WebView.subproj/WebController.h
index 7ab880a..80bbb54 100644
--- a/WebKit/WebView.subproj/WebController.h
+++ b/WebKit/WebView.subproj/WebController.h
@@ -121,14 +121,19 @@
A IFLoadProgress capture the state associated with a load progress
indication. Should we use a struct?
*/
- at interface IFLoadProgress
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
{
int bytesSoFar; // 0 if this is the start of load
int totalToLoad; // -1 if this is not known.
// bytesSoFar == totalLoaded when complete
-#ifdef TENTATIVE_API
- IF_LOAD_TYPES type; // load types, either image, css, jscript, or html
-#endif
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
}
@end
diff --git a/WebKit/WebView.subproj/WebDataSource.m b/WebKit/WebView.subproj/WebDataSource.m
index 9a8577a..b5f5278 100644
--- a/WebKit/WebView.subproj/WebDataSource.m
+++ b/WebKit/WebView.subproj/WebDataSource.m
@@ -231,7 +231,7 @@
// Returns NO if the data source is not currently loading.
- (void)stopLoading
{
- [NSException raise:IFMethodNotYetImplemented format:@"IFWebDataSource::stopLoading is not implemented"];
+ [self _part]->closeURL ();
}
diff --git a/WebKit/WebView.subproj/WebFrame.h b/WebKit/WebView.subproj/WebFrame.h
index 049e8f2..5bfb9d2 100644
--- a/WebKit/WebView.subproj/WebFrame.h
+++ b/WebKit/WebView.subproj/WebFrame.h
@@ -19,9 +19,19 @@
- (NSString *)name;
- (void)setView: view;
- view;
+
+/*
+ Sets the frame's data source. Note that the data source will be
+ considered 'provisional' until it has been loaded, and at least
+ ~some~ data has been received.
+*/
- (void)setDataSource: (IFWebDataSource *)ds;
- (IFWebDataSource *)dataSource;
+- (IFWebDataSource *)provisionalDataSource;
+
+
+
- (void)reset;
// private
diff --git a/WebKit/WebView.subproj/WebFramePrivate.h b/WebKit/WebView.subproj/WebFramePrivate.h
index a43ae5e..2b1f93b 100644
--- a/WebKit/WebView.subproj/WebFramePrivate.h
+++ b/WebKit/WebView.subproj/WebFramePrivate.h
@@ -15,6 +15,7 @@
NSString *name;
id view;
IFWebDataSource *dataSource;
+ IFWebDataSource *provisionalDataSource;
void *renderFramePart;
}
diff --git a/WebKit/WebView.subproj/WebFramePrivate.m b/WebKit/WebView.subproj/WebFramePrivate.m
index c197c37..73c2a8d 100644
--- a/WebKit/WebView.subproj/WebFramePrivate.m
+++ b/WebKit/WebView.subproj/WebFramePrivate.m
@@ -39,6 +39,14 @@
}
+- (IFWebDataSource *)provisionalDataSource { return provisionalDataSource; }
+- (void)setProvisionalDataSource: (IFWebDataSource *)d
+{
+ [provisionalDataSource autorelease];
+ provisionalDataSource = [d retain];
+}
+
+
- (void *)renderFramePart { return renderFramePart; }
- (void)setRenderFramePart: (void *)p
{
diff --git a/WebKit/WebView.subproj/WebView.h b/WebKit/WebView.subproj/WebView.h
index 7ab880a..80bbb54 100644
--- a/WebKit/WebView.subproj/WebView.h
+++ b/WebKit/WebView.subproj/WebView.h
@@ -121,14 +121,19 @@
A IFLoadProgress capture the state associated with a load progress
indication. Should we use a struct?
*/
- at interface IFLoadProgress
+typedef enum {
+ IF_LOAD_TYPE_CSS = 1,
+ IF_LOAD_TYPE_IMAGE = 2,
+ IF_LOAD_TYPE_SCRIPT = 3
+} IF_LOAD_TYPE;
+
+
+ at interface IFLoadProgress : NSObject
{
int bytesSoFar; // 0 if this is the start of load
int totalToLoad; // -1 if this is not known.
// bytesSoFar == totalLoaded when complete
-#ifdef TENTATIVE_API
- IF_LOAD_TYPES type; // load types, either image, css, jscript, or html
-#endif
+ IF_LOAD_TYPE type; // load types, either image, css, or jscript
}
@end
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list