28d4e9eb20478099c75e4e045fcd088d18093804
[WebKit-https.git] / WebKit / Misc.subproj / WebIconLoader.m
1 //
2 //  WebIconLoader.m
3 //  WebKit
4 //
5 //  Created by Chris Blumenberg on Thu Jul 18 2002.
6 //  Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
7 //
8
9 #import <WebKit/WebIconLoader.h>
10
11 #import <WebKit/WebIconDatabase.h>
12 #import <WebKit/WebIconDatabasePrivate.h>
13 #import <WebKit/WebNSURLExtras.h>
14
15 #define WebIconLoaderWeeksWorthOfSeconds (60 * 60 * 24 * 7)
16
17 @interface WebIconLoaderPrivate : NSObject
18 {
19 @public
20     id delegate;
21     NSURLRequest *initialRequest;
22 }
23
24 @end;
25
26 @implementation WebIconLoaderPrivate
27
28 - (void)dealloc
29 {
30     [initialRequest release];
31     [super dealloc];
32 }
33
34 @end;
35
36 @implementation WebIconLoader
37
38 - (id)initWithRequest:(NSURLRequest *)initialRequest;
39 {
40     [super init];
41     _private = [[WebIconLoaderPrivate alloc] init];
42     _private->initialRequest = [initialRequest copy];
43     return self;
44 }
45
46 - (void)dealloc
47 {
48     [_private release];
49     [super dealloc];
50 }
51
52 - (NSURL *)URL
53 {
54     return [_private->initialRequest URL];
55 }
56
57 - (id)delegate
58 {
59     return _private->delegate;
60 }
61
62 - (void)setDelegate:(id)delegate
63 {
64     _private->delegate = delegate;
65 }
66
67 - (void)startLoading
68 {
69     [self loadWithRequest:_private->initialRequest];
70 }
71
72 - (void)stopLoading
73 {
74     [self cancel];
75 }
76
77 - (void)didFinishLoading
78 {
79     NSImage *icon;
80     NS_DURING
81         NSData *data = [self resourceData];
82         icon = [data length] > 0 ? [[NSImage alloc] initWithData:data] : nil;
83     NS_HANDLER
84         icon = nil;
85     NS_ENDHANDLER
86     if ([[icon representations] count] > 0) {
87         [[WebIconDatabase sharedIconDatabase] _setIcon:icon forIconURL:[[self URL] _web_originalDataAsString]];
88     } else {
89         [[WebIconDatabase sharedIconDatabase] _setHaveNoIconForIconURL:[[self URL] _web_originalDataAsString]];
90     }
91     [_private->delegate _iconLoaderReceivedPageIcon:self];    
92     [icon release];
93     
94     [super didFinishLoading];
95 }
96
97 @end