[webkit-changes] cvs commit: WebCore/kwq KWQKJobClasses.h
KWQKJobClasses.mm KWQLoader.h KWQLoader.mm
KWQResourceLoader.h KWQResourceLoader.mm
Justin
justing at opensource.apple.com
Thu Sep 8 14:35:31 PDT 2005
justing 05/09/08 14:35:31
Modified: . ChangeLog
khtml/misc loader.cpp loader.h
kwq KWQKJobClasses.h KWQKJobClasses.mm KWQLoader.h
KWQLoader.mm KWQResourceLoader.h
KWQResourceLoader.mm
Log:
Reviewed by darin
WebCore portion of multipart/x-mixed-replace support
* khtml/misc/loader.cpp:
(Request::Request):
(Loader::slotReceivedResponse):
Only allow a multipart load for images, clear out the old multipart section to prepare for a replace
(Loader::slotData):
Multipart sections are delivered to the coreLoader by WebKit all at once, send eof to CachedImage::data
* khtml/misc/loader.h:
(khtml::CachedObject::isImage): Added
(khtml::CachedImage::isImage):
* kwq/KWQKJobClasses.h:
* kwq/KWQKJobClasses.mm:
(KIO::TransferJob::cancel):
Added a way to cancel a subresource loader from WebCore
* kwq/KWQLoader.h:
* kwq/KWQLoader.mm:
(KWQResponseIsMultipart):
* kwq/KWQResourceLoader.h:
* kwq/KWQResourceLoader.mm:
(-[KWQResourceLoader jobCanceledLoad]):
Revision Changes Path
1.106 +26 -0 WebCore/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/WebCore/ChangeLog,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -r1.105 -r1.106
--- ChangeLog 8 Sep 2005 19:57:27 -0000 1.105
+++ ChangeLog 8 Sep 2005 21:35:27 -0000 1.106
@@ -1,3 +1,29 @@
+2005-09-08 Justin Garcia <justin.garcia at apple.com>
+
+ Reviewed by darin
+
+ WebCore portion of multipart/x-mixed-replace support
+
+ * khtml/misc/loader.cpp:
+ (Request::Request):
+ (Loader::slotReceivedResponse):
+ Only allow a multipart load for images, clear out the old multipart section to prepare for a replace
+ (Loader::slotData):
+ Multipart sections are delivered to the coreLoader by WebKit all at once, send eof to CachedImage::data
+ * khtml/misc/loader.h:
+ (khtml::CachedObject::isImage): Added
+ (khtml::CachedImage::isImage):
+ * kwq/KWQKJobClasses.h:
+ * kwq/KWQKJobClasses.mm:
+ (KIO::TransferJob::cancel):
+ Added a way to cancel a subresource loader from WebCore
+ * kwq/KWQLoader.h:
+ * kwq/KWQLoader.mm:
+ (KWQResponseIsMultipart):
+ * kwq/KWQResourceLoader.h:
+ * kwq/KWQResourceLoader.mm:
+ (-[KWQResourceLoader jobCanceledLoad]):
+
2005-09-08 Vicki Murley <vicki at apple.com>
Reviewed by Don Melton.
1.74 +14 -1 WebCore/khtml/misc/loader.cpp
Index: loader.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/misc/loader.cpp,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- loader.cpp 25 Aug 2005 17:47:13 -0000 1.73
+++ loader.cpp 8 Sep 2005 21:35:29 -0000 1.74
@@ -1236,6 +1236,7 @@
object->setRequest(this);
incremental = _incremental;
m_docLoader = dl;
+ multipart = false;
}
Request::~Request()
@@ -1660,6 +1661,16 @@
ASSERT(response);
r->object->setResponse(response);
r->object->setExpireDate(KWQCacheObjectExpiresTime(r->m_docLoader, response), false);
+
+ if (r->multipart) {
+ ASSERT(r->object->isImage());
+ static_cast<CachedImage *>(r->object)->clear();
+ r->m_buffer = QBuffer();
+ } else if (KWQResponseIsMultipart(response)) {
+ r->multipart = true;
+ if (!r->object->isImage())
+ static_cast<KIO::TransferJob*>(job)->cancel();
+ }
}
#endif
@@ -1685,7 +1696,9 @@
r->m_buffer.writeBlock( data.data(), data.size() );
#endif
- if(r->incremental)
+ if (r->multipart)
+ r->object->data( r->m_buffer, true ); // the loader delivers the data in a multipart section all at once, send eof
+ else if(r->incremental)
r->object->data( r->m_buffer, false );
}
1.42 +5 -1 WebCore/khtml/misc/loader.h
Index: loader.h
===================================================================
RCS file: /cvs/root/WebCore/khtml/misc/loader.h,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- loader.h 27 Aug 2005 00:14:20 -0000 1.41
+++ loader.h 8 Sep 2005 21:35:29 -0000 1.42
@@ -170,6 +170,8 @@
int size() const { return m_size; }
bool isLoaded() const { return !m_loading; }
+
+ virtual bool isImage() const { return false; }
int accessCount() const { return m_accessCount; }
void increaseAccessCount() { m_accessCount++; }
@@ -359,8 +361,9 @@
virtual bool schedule() const { return true; }
void checkNotify();
+
+ virtual bool isImage() const { return true; }
- protected:
void clear();
private slots:
@@ -524,6 +527,7 @@
QBuffer m_buffer;
CachedObject *object;
DocLoader* m_docLoader;
+ bool multipart;
};
/**
1.37 +1 -0 WebCore/kwq/KWQKJobClasses.h
Index: KWQKJobClasses.h
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQKJobClasses.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- KWQKJobClasses.h 9 Dec 2004 18:57:20 -0000 1.36
+++ KWQKJobClasses.h 8 Sep 2005 21:35:29 -0000 1.37
@@ -72,6 +72,7 @@
void kill();
void setLoader(KWQResourceLoader *);
+ void cancel();
KURL url() const;
1.48 +5 -0 WebCore/kwq/KWQKJobClasses.mm
Index: KWQKJobClasses.mm
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQKJobClasses.mm,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- KWQKJobClasses.mm 14 Jul 2005 02:32:33 -0000 1.47
+++ KWQKJobClasses.mm 8 Sep 2005 21:35:30 -0000 1.48
@@ -207,6 +207,11 @@
d->loader = loader;
}
+void TransferJob::cancel()
+{
+ [d->loader jobCanceledLoad];
+}
+
KURL TransferJob::url() const
{
return d->URL;
1.23 +1 -0 WebCore/kwq/KWQLoader.h
Index: KWQLoader.h
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQLoader.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- KWQLoader.h 4 Dec 2004 18:37:31 -0000 1.22
+++ KWQLoader.h 8 Sep 2005 21:35:30 -0000 1.23
@@ -61,6 +61,7 @@
bool KWQIsResponseURLEqualToURL(NSURLResponse *response, const DOM::DOMString &m_url);
QString KWQResponseURL(NSURLResponse *response);
NSString *KWQResponseMIMEType(NSURLResponse *response);
+bool KWQResponseIsMultipart(NSURLResponse *response);
int KWQNumberOfPendingOrLoadingRequests(khtml::DocLoader *dl);
time_t KWQCacheObjectExpiresTime(khtml::DocLoader *docLoader, NSURLResponse *response);
NSString *KWQHeaderStringFromDictionary(NSDictionary *headers, int statusCode);
1.122 +9 -0 WebCore/kwq/KWQLoader.mm
Index: KWQLoader.mm
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQLoader.mm,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -r1.121 -r1.122
--- KWQLoader.mm 25 Aug 2005 17:47:25 -0000 1.121
+++ KWQLoader.mm 8 Sep 2005 21:35:30 -0000 1.122
@@ -317,6 +317,15 @@
return NULL;
}
+bool KWQResponseIsMultipart(NSURLResponse *response)
+{
+ KWQ_BLOCK_EXCEPTIONS;
+ return [[response MIMEType] isEqualToString:@"multipart/x-mixed-replace"];
+ KWQ_UNBLOCK_EXCEPTIONS;
+
+ return false;
+}
+
time_t KWQCacheObjectExpiresTime(khtml::DocLoader *docLoader, NSURLResponse *response)
{
KWQ_BLOCK_EXCEPTIONS;
1.4 +1 -0 WebCore/kwq/KWQResourceLoader.h
Index: KWQResourceLoader.h
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQResourceLoader.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- KWQResourceLoader.h 19 Nov 2003 18:55:18 -0000 1.3
+++ KWQResourceLoader.h 8 Sep 2005 21:35:30 -0000 1.4
@@ -42,5 +42,6 @@
- (id)initWithJob:(KIO::TransferJob *)job;
- (void)setHandle:(id <WebCoreResourceHandle>)handle;
- (void)jobWillBeDeallocated;
+- (void)jobCanceledLoad;
@end
1.15 +5 -0 WebCore/kwq/KWQResourceLoader.mm
Index: KWQResourceLoader.mm
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQResourceLoader.mm,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- KWQResourceLoader.mm 25 Feb 2005 00:00:43 -0000 1.14
+++ KWQResourceLoader.mm 8 Sep 2005 21:35:30 -0000 1.15
@@ -97,6 +97,11 @@
job = 0;
}
+- (void)jobCanceledLoad
+{
+ [_handle cancel];
+}
+
- (void)cancel
{
if (_job) {
More information about the webkit-changes
mailing list