[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
cblu
cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 06:04:55 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit e886dbab8d85fecae9a47cb473489bbab6a7dcd6
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sat Apr 13 01:03:06 2002 +0000
First implementation of IFDownloadHandler and IFDownloadHandlerPrivate.
Added:
- (void) startedDownloadWithHandler:(IFDownloadHandler *)downloadHandler
- (void) receivedProgress:(IFLoadProgress *)progress forDownloadHandler$
- (void) receivedError:(IFError *)error forDownloadHandler:(IFDownloadH$
to Alex's WebController.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@1003 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 788f8f4..2949ab4 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,4 +1,8 @@
-2002-04-11 Chris Blumenberg <set EMAIL_ADDRESS environment variable>
+2002-04-12 Chris Blumenberg <cblu at apple.com>
+
+ First implementation of IFDownloadHandler and IFDownloadHandlerPrivate.
+
+2002-04-11 Chris Blumenberg <cblu at apple.com>
Added support for non-html content. Non-html content is embedded in a
contrived HTML document.
@@ -28,7 +32,7 @@
(-[IFMainURLHandleClient IFURLHandleResourceDidFinishLoading:data:]),
(-[IFMainURLHandleClient IFURLHandle:resourceDataDidBecomeAvailable:]):
-2002-04-10 Chris Blumenberg <set EMAIL_ADDRESS environment variable>
+2002-04-10 Chris Blumenberg <cblu at apple.com>
Cleaned up stream deallocations.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index 788f8f4..2949ab4 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,4 +1,8 @@
-2002-04-11 Chris Blumenberg <set EMAIL_ADDRESS environment variable>
+2002-04-12 Chris Blumenberg <cblu at apple.com>
+
+ First implementation of IFDownloadHandler and IFDownloadHandlerPrivate.
+
+2002-04-11 Chris Blumenberg <cblu at apple.com>
Added support for non-html content. Non-html content is embedded in a
contrived HTML document.
@@ -28,7 +32,7 @@
(-[IFMainURLHandleClient IFURLHandleResourceDidFinishLoading:data:]),
(-[IFMainURLHandleClient IFURLHandle:resourceDataDidBecomeAvailable:]):
-2002-04-10 Chris Blumenberg <set EMAIL_ADDRESS environment variable>
+2002-04-10 Chris Blumenberg <cblu at apple.com>
Cleaned up stream deallocations.
diff --git a/WebKit/MIME.subproj/IFContentHandler.h b/WebKit/MIME.subproj/IFContentHandler.h
index 1811903..05def3f 100644
--- a/WebKit/MIME.subproj/IFContentHandler.h
+++ b/WebKit/MIME.subproj/IFContentHandler.h
@@ -4,7 +4,7 @@
*/
#import <Foundation/Foundation.h>
-#import <IFMIMEHandler.h>
+#import <WebKit/IFMIMEHandler.h>
@interface IFContentHandler : NSObject {
IFMIMEHandlerType handlerType;
diff --git a/WebKit/MIME.subproj/IFContentHandler.m b/WebKit/MIME.subproj/IFContentHandler.m
index 9295023..05dee87 100644
--- a/WebKit/MIME.subproj/IFContentHandler.m
+++ b/WebKit/MIME.subproj/IFContentHandler.m
@@ -3,7 +3,7 @@
Copyright 2002, Apple, Inc. All rights reserved.
*/
-#import "IFContentHandler.h"
+#import <WebKit/IFContentHandler.h>
static NSString *imageDocumentTemplate = nil;
static NSString *pluginDocumentTemplate = nil;
diff --git a/WebKit/MIME.subproj/IFDownloadHandler.h b/WebKit/MIME.subproj/IFDownloadHandler.h
new file mode 100644
index 0000000..c29894c
--- /dev/null
+++ b/WebKit/MIME.subproj/IFDownloadHandler.h
@@ -0,0 +1,23 @@
+//
+// IFDownloadHandler.h
+// WebKit
+//
+// Created by Chris Blumenberg on Thu Apr 11 2002.
+// Copyright (c) 2002 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <WebKit/IFMIMEHandler.h>
+#import <WebFoundation/WebFoundation.h>
+
+ at interface IFDownloadHandler : NSObject {
+ at private
+ id _downloadHandlerPrivate;
+}
+
+- (NSURL *) url;
+- (IFMIMEHandler *) mimeHandler;
+- (void) cancelDownload;
+- (void) storeAtPath:(NSString *)path;
+- (void) setOpenAfterDownload:(BOOL)open;
+ at end
diff --git a/WebKit/MIME.subproj/IFDownloadHandler.m b/WebKit/MIME.subproj/IFDownloadHandler.m
new file mode 100644
index 0000000..7333773
--- /dev/null
+++ b/WebKit/MIME.subproj/IFDownloadHandler.m
@@ -0,0 +1,44 @@
+//
+// IFDownloadHandler.m
+// WebKit
+//
+// Created by Chris Blumenberg on Thu Apr 11 2002.
+// Copyright (c) 2002 __MyCompanyName__. All rights reserved.
+//
+
+#import <WebKit/IFDownloadHandler.h>
+#import <WebKit/IFDownloadHandlerPrivate.h>
+
+ at implementation IFDownloadHandler
+
+- (NSURL *) url
+{
+ return [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _url];
+}
+
+- (IFMIMEHandler *) mimeHandler
+{
+ return [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _mimeHandler];
+}
+
+- (void) cancelDownload
+{
+ [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _cancelDownload];
+}
+
+- (void) storeAtPath:(NSString *)path
+{
+ [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _storeAtPath:path];
+}
+
+- (void) dealloc
+{
+ [_downloadHandlerPrivate release];
+}
+
+- (void) setOpenAfterDownload:(BOOL)open
+{
+ [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _setOpenAfterDownload:open];
+}
+
+ at end
diff --git a/WebKit/MIME.subproj/IFDownloadHandlerPrivate.h b/WebKit/MIME.subproj/IFDownloadHandlerPrivate.h
new file mode 100644
index 0000000..82244a5
--- /dev/null
+++ b/WebKit/MIME.subproj/IFDownloadHandlerPrivate.h
@@ -0,0 +1,37 @@
+//
+// IFDownloadHandlerPrivate.h
+// WebKit
+//
+// Created by Chris Blumenberg on Thu Apr 11 2002.
+// Copyright (c) 2002 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <WebFoundation/WebFoundation.h>
+#import <WebKit/IFDownloadHandler.h>
+#import <WebKit/IFMIMEHandler.h>
+
+ at interface IFDownloadHandlerPrivate : NSObject {
+ IFMIMEHandler *mimeHandler;
+ IFURLHandle *urlHandle;
+ NSString *path;
+ BOOL openAfterDownload;
+}
+
+- (void) _setMIMEHandler:(IFMIMEHandler *) mHandler;
+- (void) _setURLHandle:(IFURLHandle *)uHandle;
+- (NSURL *) _url;
+- (IFMIMEHandler *) _mimeHandler;
+- (void) _cancelDownload;
+- (void) _storeAtPath:(NSString *)newPath;
+- (void) _finishedDownload;
+- (void) _setOpenAfterDownload:(BOOL)open;
+
+ at end
+
+ at interface IFDownloadHandler (IFPrivate)
+- _initWithURLHandle:(IFURLHandle *)uHandle mimeHandler:(IFMIMEHandler *)mHandler;
+- (void) _receivedData:(NSData *)data;
+- (void) _finishedDownload;
+
+ at end
\ No newline at end of file
diff --git a/WebKit/MIME.subproj/IFDownloadHandlerPrivate.m b/WebKit/MIME.subproj/IFDownloadHandlerPrivate.m
new file mode 100644
index 0000000..ec5bad2
--- /dev/null
+++ b/WebKit/MIME.subproj/IFDownloadHandlerPrivate.m
@@ -0,0 +1,132 @@
+//
+// IFDownloadHandlerPrivate.m
+// WebKit
+//
+// Created by Chris Blumenberg on Thu Apr 11 2002.
+// Copyright (c) 2002 __MyCompanyName__. All rights reserved.
+//
+
+#import <WebKit/IFDownloadHandlerPrivate.h>
+#import <ApplicationServices/ApplicationServices.h>
+
+ at implementation IFDownloadHandlerPrivate
+
+
+- init
+{
+ //FIXME: we should not open files by default
+ openAfterDownload = YES;
+ return self;
+}
+
+- (void) _setMIMEHandler:(IFMIMEHandler *) mHandler
+{
+ mimeHandler = [mHandler retain];
+}
+
+- (void) _setURLHandle:(IFURLHandle *)uHandle
+{
+ urlHandle = [uHandle retain];
+}
+
+- (NSURL *) _url
+{
+ return [urlHandle url];
+}
+
+- (IFMIMEHandler *) _mimeHandler
+{
+ return mimeHandler;
+}
+
+- (void) _cancelDownload
+{
+ NSFileManager *fileManager;
+
+ [urlHandle cancelLoadInBackground];
+ if(path){
+ fileManager = [NSFileManager defaultManager];
+ [fileManager removeFileAtPath:path handler:nil];
+ }
+}
+
+- (void) _storeAtPath:(NSString *)newPath
+{
+ NSFileManager *fileManager=nil;
+
+ if(path){
+ [fileManager movePath:path toPath:newPath handler:nil];
+ [path release];
+ }
+ path = [newPath retain];
+}
+
+- (void) _openDownloadedFile
+{
+ CFURLRef pathURL;
+ pathURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)path, kCFURLPOSIXPathStyle, FALSE);
+ NSLog(@"Opening: %@", path);
+ LSOpenCFURLRef(pathURL, NULL);
+ CFRelease(pathURL);
+}
+
+- (void) _finishedDownload
+{
+ NSFileManager *fileManager;
+ NSString *filename;
+
+ if(!path){
+ //FIXME: need a better way to get a file name out of a URL
+ //FIXME: need to save temp file in file cache or somewhere else
+ filename = [[[urlHandle url] absoluteString] lastPathComponent];
+ path = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Desktop/%@", filename]];
+ [path retain];
+ }
+ fileManager = [NSFileManager defaultManager];
+ [fileManager createFileAtPath:path contents:[urlHandle resourceData] attributes:nil];
+
+ //FIXME: need to send FNNotify here
+ NSLog(@"Downloaded completed. Saved to: %@", path);
+
+ if(openAfterDownload)
+ [self _openDownloadedFile];
+}
+
+- (void) _setOpenAfterDownload:(BOOL)open
+{
+ openAfterDownload = open;
+ if(path){
+ [self _openDownloadedFile];
+ }
+}
+
+- (void) dealloc
+{
+ [mimeHandler release];
+ [urlHandle release];
+ [path release];
+}
+
+ at end
+
+ at implementation IFDownloadHandler (IFPrivate)
+
+- _initWithURLHandle:(IFURLHandle *)uHandle mimeHandler:(IFMIMEHandler *)mHandler
+{
+ ((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) = [[IFDownloadHandlerPrivate alloc] init];
+ [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _setURLHandle:uHandle];
+ [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _setMIMEHandler:mHandler];
+ return self;
+}
+
+- (void) _receivedData:(NSData *)data
+{
+
+}
+
+- (void) _finishedDownload
+{
+ [((IFDownloadHandlerPrivate *)_downloadHandlerPrivate) _finishedDownload];
+}
+
+ at end
\ No newline at end of file
diff --git a/WebKit/WebKit.pbproj/project.pbxproj b/WebKit/WebKit.pbproj/project.pbxproj
index f58fd9c..00b3a7d 100644
--- a/WebKit/WebKit.pbproj/project.pbxproj
+++ b/WebKit/WebKit.pbproj/project.pbxproj
@@ -217,6 +217,8 @@
F5A672BB0263866E01000102,
F5A672BD0263866E01000102,
F5A357540265E57A01000102,
+ F5E6396B0266996101000102,
+ F544394F02674FD501FF6181,
);
isa = PBXHeadersBuildPhase;
};
@@ -266,6 +268,8 @@
F5A672BC0263866E01000102,
F5A672BE0263866E01000102,
F5A357530265E57A01000102,
+ F5E6396A0266996101000102,
+ F544395002674FD501FF6181,
);
isa = PBXSourcesBuildPhase;
};
@@ -1128,6 +1132,30 @@
settings = {
};
};
+ F544394D02674FD501FF6181 = {
+ isa = PBXFileReference;
+ name = IFDownloadHandler.h;
+ path = MIME.subproj/IFDownloadHandler.h;
+ refType = 4;
+ };
+ F544394E02674FD501FF6181 = {
+ isa = PBXFileReference;
+ name = IFDownloadHandler.m;
+ path = MIME.subproj/IFDownloadHandler.m;
+ refType = 4;
+ };
+ F544394F02674FD501FF6181 = {
+ fileRef = F544394D02674FD501FF6181;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F544395002674FD501FF6181 = {
+ fileRef = F544394E02674FD501FF6181;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
F5883BDE025E5C6A01000102 = {
isa = PBXFileReference;
name = nullplugin.tiff;
@@ -1426,6 +1454,30 @@
settings = {
};
};
+ F5E639680266996101000102 = {
+ isa = PBXFileReference;
+ name = IFDownloadHandlerPrivate.m;
+ path = MIME.subproj/IFDownloadHandlerPrivate.m;
+ refType = 4;
+ };
+ F5E639690266996101000102 = {
+ isa = PBXFileReference;
+ name = IFDownloadHandlerPrivate.h;
+ path = MIME.subproj/IFDownloadHandlerPrivate.h;
+ refType = 4;
+ };
+ F5E6396A0266996101000102 = {
+ fileRef = F5E639680266996101000102;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5E6396B0266996101000102 = {
+ fileRef = F5E639690266996101000102;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
F5EBC45202134BB601CA1520 = {
children = (
F5EBC45502134BC301CA1520,
@@ -1485,6 +1537,10 @@
F5F084BE024BDCA701CA1520,
F5A357510265E57A01000102,
F5A357520265E57A01000102,
+ F544394D02674FD501FF6181,
+ F544394E02674FD501FF6181,
+ F5E639690266996101000102,
+ F5E639680266996101000102,
);
isa = PBXGroup;
name = MIME;
@@ -1507,6 +1563,9 @@
fileRef = F5F084B9024BDC8E01CA1520;
isa = PBXBuildFile;
settings = {
+ ATTRIBUTES = (
+ Public,
+ );
};
};
F5F084BC024BDC8E01CA1520 = {
diff --git a/WebKit/WebView.subproj/IFBaseWebController.mm b/WebKit/WebView.subproj/IFBaseWebController.mm
index e96d2e6..48aba86 100644
--- a/WebKit/WebView.subproj/IFBaseWebController.mm
+++ b/WebKit/WebView.subproj/IFBaseWebController.mm
@@ -300,4 +300,19 @@
// Do nothing. Subclasses typically override this method.
}
+- (void) startedDownloadWithHandler:(IFDownloadHandler *)downloadHandler
+{
+ // Do nothing. Subclasses typically override this method.
+}
+
+- (void) receivedProgress:(IFLoadProgress *)progress forDownloadHandler:(IFDownloadHandler *)downloadHandler
+{
+ // Do nothing. Subclasses typically override this method.
+}
+
+- (void) receivedError:(IFError *)error forDownloadHandler:(IFDownloadHandler *)downloadHandler partialProgress: (IFLoadProgress *)progress
+{
+ // Do nothing. Subclasses typically override this method.
+}
+
@end
diff --git a/WebKit/WebView.subproj/IFMainURLHandleClient.h b/WebKit/WebView.subproj/IFMainURLHandleClient.h
index b3bfefb..545e218 100644
--- a/WebKit/WebView.subproj/IFMainURLHandleClient.h
+++ b/WebKit/WebView.subproj/IFMainURLHandleClient.h
@@ -17,8 +17,10 @@
{
id dataSource;
KHTMLPart *part;
- BOOL sentFakeDocForNonHTMLContentType, typeChecked;
+ BOOL sentFakeDocForNonHTMLContentType, typeChecked, downloadStarted;
IFMIMEHandler *mimeHandler;
+ IFMIMEHandlerType handlerType;
+ IFDownloadHandler *downloadHandler;
}
- initWithDataSource: (IFWebDataSource *)ds part: (KHTMLPart *)p;
@end
diff --git a/WebKit/WebView.subproj/IFMainURLHandleClient.mm b/WebKit/WebView.subproj/IFMainURLHandleClient.mm
index 1042146..7050b67 100644
--- a/WebKit/WebView.subproj/IFMainURLHandleClient.mm
+++ b/WebKit/WebView.subproj/IFMainURLHandleClient.mm
@@ -11,6 +11,7 @@
#import <WebKit/IFMIMEDatabase.h>
#import <WebKit/WebKitDebug.h>
#import <WebKit/IFContentHandler.h>
+#import <WebKit/IFDownloadHandlerPrivate.h>
#include <khtmlview.h>
@@ -23,6 +24,7 @@
part = p;
part->ref();
sentFakeDocForNonHTMLContentType = NO;
+ downloadStarted = NO;
typeChecked = NO;
return self;
}
@@ -51,7 +53,12 @@
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = -1;
loadProgress->bytesSoFar = -1;
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -63,7 +70,7 @@
WEBKITDEBUGLEVEL (WEBKIT_LOG_LOADING, "url = %s\n", [[[sender url] absoluteString] cString]);
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT) {
+ if(handlerType == IFMIMEHANDLERTYPE_TEXT) {
contentHandler = [[IFContentHandler alloc] initWithMIMEHandler:mimeHandler URL:[sender url]];
fakeHTMLDocument = [contentHandler textHTMLDocumentBottom];
fakeHTMLDocumentBytes = [fakeHTMLDocument cString];
@@ -74,7 +81,13 @@
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = [data length];
loadProgress->bytesSoFar = [data length];
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ [downloadHandler _finishedDownload];
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -91,50 +104,57 @@
if(!typeChecked){
mimeDatabase = [IFMIMEDatabase sharedMIMEDatabase];
mimeHandler = [[mimeDatabase MIMEHandlerForMIMEType:[sender contentType]] retain];
+ handlerType = [mimeHandler handlerType];
typeChecked = YES;
}
// if it's html, send the data to the part
// FIXME: [sender contentType] still returns nil if from cache
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_NIL || [mimeHandler handlerType] == IFMIMEHANDLERTYPE_HTML) {
+ if(handlerType == IFMIMEHANDLERTYPE_NIL || handlerType == IFMIMEHANDLERTYPE_HTML) {
part->slotData(sender, (const char *)[data bytes], [data length]);
}
// for non-html documents, create html doc that embeds them
- else if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_IMAGE ||
- [mimeHandler handlerType] == IFMIMEHANDLERTYPE_PLUGIN ||
- [mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT) {
+ else if(handlerType == IFMIMEHANDLERTYPE_IMAGE ||
+ handlerType == IFMIMEHANDLERTYPE_PLUGIN ||
+ handlerType == IFMIMEHANDLERTYPE_TEXT) {
if (!sentFakeDocForNonHTMLContentType) {
contentHandler = [[IFContentHandler alloc] initWithMIMEHandler:mimeHandler URL:[sender url]];
fakeHTMLDocument = [contentHandler HTMLDocument];
fakeHTMLDocumentBytes = [fakeHTMLDocument cString];
part->slotData(sender, (const char *)fakeHTMLDocumentBytes, strlen(fakeHTMLDocumentBytes));
- sentFakeDocForNonHTMLContentType = YES;
[contentHandler release];
+ sentFakeDocForNonHTMLContentType = YES;
}
// for text documents, the incoming data is part of the main page
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT){
+ if(handlerType == IFMIMEHANDLERTYPE_TEXT){
part->slotData(sender, (const char *)[data bytes], [data length]);
}
}
- // FIXME: download code goes here, stop reporting error
- else{
- [sender cancelLoadInBackground];
- IFError *error = [[IFError alloc] initWithErrorCode: IFFileDownloadNotSupportedError failingURL: [sender url]];
- [[dataSource controller] _mainReceivedError: error
- forResource: [[sender url] absoluteString] partialProgress:nil fromDataSource: dataSource];
- [error release];
- return;
+ // downloaded file
+ else if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ if(!downloadStarted){
+ downloadHandler = [[IFDownloadHandler alloc] _initWithURLHandle:sender mimeHandler:mimeHandler];
+ [[dataSource controller] startedDownloadWithHandler:downloadHandler];
+ downloadStarted = YES;
+ }
+ [downloadHandler _receivedData:data];
}
// update progress
+
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = [sender contentLength];
loadProgress->bytesSoFar = [sender contentLengthReceived];
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
- forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ NSLog(@"%d of %d", loadProgress->bytesSoFar, loadProgress->totalToLoad);
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -147,7 +167,13 @@
loadProgress->bytesSoFar = [sender contentLengthReceived];
IFError *error = [[IFError alloc] initWithErrorCode: result failingURL: [sender url]];
- [[dataSource controller] _mainReceivedError: error forResource: [[sender url] absoluteString] partialProgress: loadProgress fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedError: error forDownloadHandler:downloadHandler
+ partialProgress: loadProgress];
+ }else{
+ [[dataSource controller] _mainReceivedError: error forResource: [[sender url] absoluteString]
+ partialProgress: loadProgress fromDataSource: dataSource];
+ }
[error release];
}
diff --git a/WebKit/WebView.subproj/IFWebController.h b/WebKit/WebView.subproj/IFWebController.h
index e0ef50c..9fc2c9f 100644
--- a/WebKit/WebView.subproj/IFWebController.h
+++ b/WebKit/WebView.subproj/IFWebController.h
@@ -7,7 +7,7 @@
#import <Cocoa/Cocoa.h>
#import <WebKit/IFLoadProgress.h>
-
+#import <WebKit/IFDownloadHandler.h>
/*
=============================================================================
@@ -145,6 +145,15 @@
// Called when a plug-in for a certain mime type is not installed
- (void)pluginNotFoundForMIMEType:(NSString *)mime pluginPageURL:(NSURL *)url;
+// Called when a file download has started
+- (void) startedDownloadWithHandler:(IFDownloadHandler *)downloadHandler;
+
+// Called when progress of a download has been made
+- (void) receivedProgress:(IFLoadProgress *)progress forDownloadHandler:(IFDownloadHandler *)downloadHandler;
+
+// Called when the download has had an error
+- (void) receivedError:(IFError *)error forDownloadHandler:(IFDownloadHandler *)downloadHandler partialProgress: (IFLoadProgress *)progress;
+
@end
diff --git a/WebKit/WebView.subproj/WebController.h b/WebKit/WebView.subproj/WebController.h
index e0ef50c..9fc2c9f 100644
--- a/WebKit/WebView.subproj/WebController.h
+++ b/WebKit/WebView.subproj/WebController.h
@@ -7,7 +7,7 @@
#import <Cocoa/Cocoa.h>
#import <WebKit/IFLoadProgress.h>
-
+#import <WebKit/IFDownloadHandler.h>
/*
=============================================================================
@@ -145,6 +145,15 @@
// Called when a plug-in for a certain mime type is not installed
- (void)pluginNotFoundForMIMEType:(NSString *)mime pluginPageURL:(NSURL *)url;
+// Called when a file download has started
+- (void) startedDownloadWithHandler:(IFDownloadHandler *)downloadHandler;
+
+// Called when progress of a download has been made
+- (void) receivedProgress:(IFLoadProgress *)progress forDownloadHandler:(IFDownloadHandler *)downloadHandler;
+
+// Called when the download has had an error
+- (void) receivedError:(IFError *)error forDownloadHandler:(IFDownloadHandler *)downloadHandler partialProgress: (IFLoadProgress *)progress;
+
@end
diff --git a/WebKit/WebView.subproj/WebMainResourceClient.h b/WebKit/WebView.subproj/WebMainResourceClient.h
index b3bfefb..545e218 100644
--- a/WebKit/WebView.subproj/WebMainResourceClient.h
+++ b/WebKit/WebView.subproj/WebMainResourceClient.h
@@ -17,8 +17,10 @@
{
id dataSource;
KHTMLPart *part;
- BOOL sentFakeDocForNonHTMLContentType, typeChecked;
+ BOOL sentFakeDocForNonHTMLContentType, typeChecked, downloadStarted;
IFMIMEHandler *mimeHandler;
+ IFMIMEHandlerType handlerType;
+ IFDownloadHandler *downloadHandler;
}
- initWithDataSource: (IFWebDataSource *)ds part: (KHTMLPart *)p;
@end
diff --git a/WebKit/WebView.subproj/WebMainResourceClient.m b/WebKit/WebView.subproj/WebMainResourceClient.m
index 1042146..7050b67 100644
--- a/WebKit/WebView.subproj/WebMainResourceClient.m
+++ b/WebKit/WebView.subproj/WebMainResourceClient.m
@@ -11,6 +11,7 @@
#import <WebKit/IFMIMEDatabase.h>
#import <WebKit/WebKitDebug.h>
#import <WebKit/IFContentHandler.h>
+#import <WebKit/IFDownloadHandlerPrivate.h>
#include <khtmlview.h>
@@ -23,6 +24,7 @@
part = p;
part->ref();
sentFakeDocForNonHTMLContentType = NO;
+ downloadStarted = NO;
typeChecked = NO;
return self;
}
@@ -51,7 +53,12 @@
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = -1;
loadProgress->bytesSoFar = -1;
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -63,7 +70,7 @@
WEBKITDEBUGLEVEL (WEBKIT_LOG_LOADING, "url = %s\n", [[[sender url] absoluteString] cString]);
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT) {
+ if(handlerType == IFMIMEHANDLERTYPE_TEXT) {
contentHandler = [[IFContentHandler alloc] initWithMIMEHandler:mimeHandler URL:[sender url]];
fakeHTMLDocument = [contentHandler textHTMLDocumentBottom];
fakeHTMLDocumentBytes = [fakeHTMLDocument cString];
@@ -74,7 +81,13 @@
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = [data length];
loadProgress->bytesSoFar = [data length];
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ [downloadHandler _finishedDownload];
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -91,50 +104,57 @@
if(!typeChecked){
mimeDatabase = [IFMIMEDatabase sharedMIMEDatabase];
mimeHandler = [[mimeDatabase MIMEHandlerForMIMEType:[sender contentType]] retain];
+ handlerType = [mimeHandler handlerType];
typeChecked = YES;
}
// if it's html, send the data to the part
// FIXME: [sender contentType] still returns nil if from cache
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_NIL || [mimeHandler handlerType] == IFMIMEHANDLERTYPE_HTML) {
+ if(handlerType == IFMIMEHANDLERTYPE_NIL || handlerType == IFMIMEHANDLERTYPE_HTML) {
part->slotData(sender, (const char *)[data bytes], [data length]);
}
// for non-html documents, create html doc that embeds them
- else if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_IMAGE ||
- [mimeHandler handlerType] == IFMIMEHANDLERTYPE_PLUGIN ||
- [mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT) {
+ else if(handlerType == IFMIMEHANDLERTYPE_IMAGE ||
+ handlerType == IFMIMEHANDLERTYPE_PLUGIN ||
+ handlerType == IFMIMEHANDLERTYPE_TEXT) {
if (!sentFakeDocForNonHTMLContentType) {
contentHandler = [[IFContentHandler alloc] initWithMIMEHandler:mimeHandler URL:[sender url]];
fakeHTMLDocument = [contentHandler HTMLDocument];
fakeHTMLDocumentBytes = [fakeHTMLDocument cString];
part->slotData(sender, (const char *)fakeHTMLDocumentBytes, strlen(fakeHTMLDocumentBytes));
- sentFakeDocForNonHTMLContentType = YES;
[contentHandler release];
+ sentFakeDocForNonHTMLContentType = YES;
}
// for text documents, the incoming data is part of the main page
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT){
+ if(handlerType == IFMIMEHANDLERTYPE_TEXT){
part->slotData(sender, (const char *)[data bytes], [data length]);
}
}
- // FIXME: download code goes here, stop reporting error
- else{
- [sender cancelLoadInBackground];
- IFError *error = [[IFError alloc] initWithErrorCode: IFFileDownloadNotSupportedError failingURL: [sender url]];
- [[dataSource controller] _mainReceivedError: error
- forResource: [[sender url] absoluteString] partialProgress:nil fromDataSource: dataSource];
- [error release];
- return;
+ // downloaded file
+ else if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ if(!downloadStarted){
+ downloadHandler = [[IFDownloadHandler alloc] _initWithURLHandle:sender mimeHandler:mimeHandler];
+ [[dataSource controller] startedDownloadWithHandler:downloadHandler];
+ downloadStarted = YES;
+ }
+ [downloadHandler _receivedData:data];
}
// update progress
+
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = [sender contentLength];
loadProgress->bytesSoFar = [sender contentLengthReceived];
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
- forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ NSLog(@"%d of %d", loadProgress->bytesSoFar, loadProgress->totalToLoad);
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -147,7 +167,13 @@
loadProgress->bytesSoFar = [sender contentLengthReceived];
IFError *error = [[IFError alloc] initWithErrorCode: result failingURL: [sender url]];
- [[dataSource controller] _mainReceivedError: error forResource: [[sender url] absoluteString] partialProgress: loadProgress fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedError: error forDownloadHandler:downloadHandler
+ partialProgress: loadProgress];
+ }else{
+ [[dataSource controller] _mainReceivedError: error forResource: [[sender url] absoluteString]
+ partialProgress: loadProgress fromDataSource: dataSource];
+ }
[error release];
}
diff --git a/WebKit/WebView.subproj/WebMainResourceLoader.h b/WebKit/WebView.subproj/WebMainResourceLoader.h
index b3bfefb..545e218 100644
--- a/WebKit/WebView.subproj/WebMainResourceLoader.h
+++ b/WebKit/WebView.subproj/WebMainResourceLoader.h
@@ -17,8 +17,10 @@
{
id dataSource;
KHTMLPart *part;
- BOOL sentFakeDocForNonHTMLContentType, typeChecked;
+ BOOL sentFakeDocForNonHTMLContentType, typeChecked, downloadStarted;
IFMIMEHandler *mimeHandler;
+ IFMIMEHandlerType handlerType;
+ IFDownloadHandler *downloadHandler;
}
- initWithDataSource: (IFWebDataSource *)ds part: (KHTMLPart *)p;
@end
diff --git a/WebKit/WebView.subproj/WebMainResourceLoader.m b/WebKit/WebView.subproj/WebMainResourceLoader.m
index 1042146..7050b67 100644
--- a/WebKit/WebView.subproj/WebMainResourceLoader.m
+++ b/WebKit/WebView.subproj/WebMainResourceLoader.m
@@ -11,6 +11,7 @@
#import <WebKit/IFMIMEDatabase.h>
#import <WebKit/WebKitDebug.h>
#import <WebKit/IFContentHandler.h>
+#import <WebKit/IFDownloadHandlerPrivate.h>
#include <khtmlview.h>
@@ -23,6 +24,7 @@
part = p;
part->ref();
sentFakeDocForNonHTMLContentType = NO;
+ downloadStarted = NO;
typeChecked = NO;
return self;
}
@@ -51,7 +53,12 @@
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = -1;
loadProgress->bytesSoFar = -1;
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -63,7 +70,7 @@
WEBKITDEBUGLEVEL (WEBKIT_LOG_LOADING, "url = %s\n", [[[sender url] absoluteString] cString]);
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT) {
+ if(handlerType == IFMIMEHANDLERTYPE_TEXT) {
contentHandler = [[IFContentHandler alloc] initWithMIMEHandler:mimeHandler URL:[sender url]];
fakeHTMLDocument = [contentHandler textHTMLDocumentBottom];
fakeHTMLDocumentBytes = [fakeHTMLDocument cString];
@@ -74,7 +81,13 @@
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = [data length];
loadProgress->bytesSoFar = [data length];
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ [downloadHandler _finishedDownload];
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -91,50 +104,57 @@
if(!typeChecked){
mimeDatabase = [IFMIMEDatabase sharedMIMEDatabase];
mimeHandler = [[mimeDatabase MIMEHandlerForMIMEType:[sender contentType]] retain];
+ handlerType = [mimeHandler handlerType];
typeChecked = YES;
}
// if it's html, send the data to the part
// FIXME: [sender contentType] still returns nil if from cache
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_NIL || [mimeHandler handlerType] == IFMIMEHANDLERTYPE_HTML) {
+ if(handlerType == IFMIMEHANDLERTYPE_NIL || handlerType == IFMIMEHANDLERTYPE_HTML) {
part->slotData(sender, (const char *)[data bytes], [data length]);
}
// for non-html documents, create html doc that embeds them
- else if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_IMAGE ||
- [mimeHandler handlerType] == IFMIMEHANDLERTYPE_PLUGIN ||
- [mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT) {
+ else if(handlerType == IFMIMEHANDLERTYPE_IMAGE ||
+ handlerType == IFMIMEHANDLERTYPE_PLUGIN ||
+ handlerType == IFMIMEHANDLERTYPE_TEXT) {
if (!sentFakeDocForNonHTMLContentType) {
contentHandler = [[IFContentHandler alloc] initWithMIMEHandler:mimeHandler URL:[sender url]];
fakeHTMLDocument = [contentHandler HTMLDocument];
fakeHTMLDocumentBytes = [fakeHTMLDocument cString];
part->slotData(sender, (const char *)fakeHTMLDocumentBytes, strlen(fakeHTMLDocumentBytes));
- sentFakeDocForNonHTMLContentType = YES;
[contentHandler release];
+ sentFakeDocForNonHTMLContentType = YES;
}
// for text documents, the incoming data is part of the main page
- if([mimeHandler handlerType] == IFMIMEHANDLERTYPE_TEXT){
+ if(handlerType == IFMIMEHANDLERTYPE_TEXT){
part->slotData(sender, (const char *)[data bytes], [data length]);
}
}
- // FIXME: download code goes here, stop reporting error
- else{
- [sender cancelLoadInBackground];
- IFError *error = [[IFError alloc] initWithErrorCode: IFFileDownloadNotSupportedError failingURL: [sender url]];
- [[dataSource controller] _mainReceivedError: error
- forResource: [[sender url] absoluteString] partialProgress:nil fromDataSource: dataSource];
- [error release];
- return;
+ // downloaded file
+ else if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ if(!downloadStarted){
+ downloadHandler = [[IFDownloadHandler alloc] _initWithURLHandle:sender mimeHandler:mimeHandler];
+ [[dataSource controller] startedDownloadWithHandler:downloadHandler];
+ downloadStarted = YES;
+ }
+ [downloadHandler _receivedData:data];
}
// update progress
+
IFLoadProgress *loadProgress = [[IFLoadProgress alloc] init];
loadProgress->totalToLoad = [sender contentLength];
loadProgress->bytesSoFar = [sender contentLengthReceived];
- [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
- forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedProgress:loadProgress forDownloadHandler:downloadHandler];
+ NSLog(@"%d of %d", loadProgress->bytesSoFar, loadProgress->totalToLoad);
+ }else{
+ [[dataSource controller] _mainReceivedProgress: (IFLoadProgress *)loadProgress
+ forResource: [[sender url] absoluteString] fromDataSource: dataSource];
+ }
[loadProgress release];
}
@@ -147,7 +167,13 @@
loadProgress->bytesSoFar = [sender contentLengthReceived];
IFError *error = [[IFError alloc] initWithErrorCode: result failingURL: [sender url]];
- [[dataSource controller] _mainReceivedError: error forResource: [[sender url] absoluteString] partialProgress: loadProgress fromDataSource: dataSource];
+ if(handlerType == IFMIMEHANDLERTYPE_APPLICATION){
+ [[dataSource controller] receivedError: error forDownloadHandler:downloadHandler
+ partialProgress: loadProgress];
+ }else{
+ [[dataSource controller] _mainReceivedError: error forResource: [[sender url] absoluteString]
+ partialProgress: loadProgress fromDataSource: dataSource];
+ }
[error release];
}
diff --git a/WebKit/WebView.subproj/WebView.h b/WebKit/WebView.subproj/WebView.h
index e0ef50c..9fc2c9f 100644
--- a/WebKit/WebView.subproj/WebView.h
+++ b/WebKit/WebView.subproj/WebView.h
@@ -7,7 +7,7 @@
#import <Cocoa/Cocoa.h>
#import <WebKit/IFLoadProgress.h>
-
+#import <WebKit/IFDownloadHandler.h>
/*
=============================================================================
@@ -145,6 +145,15 @@
// Called when a plug-in for a certain mime type is not installed
- (void)pluginNotFoundForMIMEType:(NSString *)mime pluginPageURL:(NSURL *)url;
+// Called when a file download has started
+- (void) startedDownloadWithHandler:(IFDownloadHandler *)downloadHandler;
+
+// Called when progress of a download has been made
+- (void) receivedProgress:(IFLoadProgress *)progress forDownloadHandler:(IFDownloadHandler *)downloadHandler;
+
+// Called when the download has had an error
+- (void) receivedError:(IFError *)error forDownloadHandler:(IFDownloadHandler *)downloadHandler partialProgress: (IFLoadProgress *)progress;
+
@end
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list