X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/d323285e7d6f4836a189d9419b716b7dbc8c2da6..df27070399c61922ec227823602f0d7f06043726:/CyteKit/WebViewController.mm diff --git a/CyteKit/WebViewController.mm b/CyteKit/WebViewController.mm index e67e6bc3..496d8b21 100644 --- a/CyteKit/WebViewController.mm +++ b/CyteKit/WebViewController.mm @@ -16,6 +16,7 @@ extern NSString * const kCAFilterNearest; #include +#include #include #include @@ -36,14 +37,6 @@ extern NSString * const kCAFilterNearest; // XXX: centralize these special class things to some file or mechanism? static Class $MFMailComposeViewController; -template -static inline void CYRelease(Type_ &value) { - if (value != nil) { - [value release]; - value = nil; - } -} - float CYScrollViewDecelerationRateNormal; @interface WebView (Apple) @@ -146,24 +139,10 @@ float CYScrollViewDecelerationRateNormal; #endif [webview_ setDelegate:nil]; - [indirect_ setDelegate:nil]; - [indirect_ release]; - - if (challenge_ != nil) - [challenge_ release]; - - if (title_ != nil) - [title_ release]; if ([loading_ count] != 0) [delegate_ releaseNetworkActivityIndicator]; - [loading_ release]; - - [reloaditem_ release]; - [loadingitem_ release]; - - [indicator_ release]; [super dealloc]; } @@ -341,8 +320,15 @@ float CYScrollViewDecelerationRateNormal; [loading_ removeObject:[NSValue valueWithNonretainedObject:frame]]; [self _didFinishLoading]; - if ([error code] == NSURLErrorCancelled) + if ([[error domain] isEqualToString:NSURLErrorDomain] && [error code] == NSURLErrorCancelled) + return; + + if ([[error domain] isEqualToString:WebKitErrorDomain] && [error code] == WebKitErrorFrameLoadInterruptedByPolicyChange) { + request_ = (id) stage2_; + stage1_ = nil; + stage2_ = nil; return; + } if ([frame parentFrame] == nil) { [self loadURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?%@", @@ -393,7 +379,11 @@ float CYScrollViewDecelerationRateNormal; // CyteWebViewDelegate {{{ - (void) webView:(WebView *)view addMessageToConsole:(NSDictionary *)message { #if LogMessages - static Pcre irritating("^(?:The page at .* displayed insecure content from .*\\.|Unsafe JavaScript attempt to access frame with URL .* from frame with URL .*\\. Domains, protocols and ports must match\\.)\\n$"); + static Pcre irritating("^(?" + ":" "The page at .* displayed insecure content from .*\\." + "|" "Unsafe JavaScript attempt to access frame with URL .* from frame with URL .*\\. Domains, protocols and ports must match\\." + ")\\n$"); + if (NSString *data = [message objectForKey:@"message"]) if (irritating(data)) return; @@ -421,8 +411,12 @@ float CYScrollViewDecelerationRateNormal; } - (void) webView:(WebView *)view didDecidePolicy:(CYWebPolicyDecision)decision forNavigationAction:(NSDictionary *)action request:(NSURLRequest *)request frame:(WebFrame *)frame { - if (decision == CYWebPolicyDecisionUse) - request_ = request; + if ([frame parentFrame] == nil) + if (decision == CYWebPolicyDecisionUse) + if (!error_) { + stage1_ = (id) request_; + request_ = request; + } } - (void) webView:(WebView *)view decidePolicyForNewWindowAction:(NSDictionary *)action request:(NSURLRequest *)request newFrameName:(NSString *)frame decisionListener:(id)listener { @@ -470,6 +464,9 @@ float CYScrollViewDecelerationRateNormal; [loading_ removeObject:[NSValue valueWithNonretainedObject:frame]]; if ([frame parentFrame] == nil) { + stage1_ = nil; + stage2_ = nil; + if (DOMDocument *document = [frame DOMDocument]) if (DOMNodeList *bodies = [document getElementsByTagName:@"body"]) for (DOMHTMLBodyElement *body in (id) bodies) { @@ -510,22 +507,27 @@ float CYScrollViewDecelerationRateNormal; if ([frame parentFrame] != nil) return; - if (title_ != nil) - [title_ autorelease]; - title_ = [title retain]; + title_ = title; [[self navigationItem] setTitle:title_]; } - (void) webView:(WebView *)view didStartProvisionalLoadForFrame:(WebFrame *)frame { +#if LogBrowser + NSLog(@"didStartProvisionalLoadForFrame:%@", frame); +#endif + [loading_ addObject:[NSValue valueWithNonretainedObject:frame]]; if ([frame parentFrame] == nil) { - CYRelease(title_); + title_ = nil; custom_ = nil; style_ = nil; function_ = nil; + stage2_ = (id) stage1_; + stage1_ = nil; + [self setHidesNavigationBar:NO]; // XXX: do we still need to do this? @@ -599,7 +601,6 @@ float CYScrollViewDecelerationRateNormal; _nodefault } - [challenge_ release]; challenge_ = nil; [alert dismissWithClickedButtonIndex:-1 animated:YES]; @@ -732,9 +733,9 @@ float CYScrollViewDecelerationRateNormal; allowsNavigationAction_ = true; class_ = _class; - loading_ = [[NSMutableSet alloc] initWithCapacity:5]; + loading_ = [NSMutableSet setWithCapacity:5]; - indirect_ = [[IndirectDelegate alloc] initWithDelegate:self]; + indirect_ = [[[IndirectDelegate alloc] initWithDelegate:self] autorelease]; CGRect bounds([[self view] bounds]); @@ -815,21 +816,21 @@ float CYScrollViewDecelerationRateNormal; [self setViewportWidth:width]; - reloaditem_ = [[UIBarButtonItem alloc] + reloaditem_ = [[[UIBarButtonItem alloc] initWithTitle:UCLocalize("RELOAD") style:[self rightButtonStyle] target:self action:@selector(reloadButtonClicked) - ]; + ] autorelease]; - loadingitem_ = [[UIBarButtonItem alloc] + loadingitem_ = [[[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:self action:@selector(reloadButtonClicked) - ]; + ] autorelease]; - indicator_ = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + indicator_ = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease]; [indicator_ setFrame:CGRectMake(15, 5, [indicator_ frame].size.width, [indicator_ frame].size.height)]; UITableView *table([[[UITableView alloc] initWithFrame:bounds style:UITableViewStyleGrouped] autorelease]);