]> git.saurik.com Git - cydia.git/blobdiff - CyteKit/WebViewController.mm
Add output filename parameter to pngcrush.sh.
[cydia.git] / CyteKit / WebViewController.mm
index e67e6bc351693a66e5c87d4ecc075da036c7cb1b..496d8b21edca6c47e30048701e4533c23e23a8fc 100644 (file)
@@ -16,6 +16,7 @@ extern NSString * const kCAFilterNearest;
 
 #include <WebCore/WebCoreThread.h>
 
+#include <WebKit/WebKitErrors.h>
 #include <WebKit/WebPreferences.h>
 
 #include <WebKit/DOMCSSPrimitiveValue.h>
@@ -36,14 +37,6 @@ extern NSString * const kCAFilterNearest;
 // XXX: centralize these special class things to some file or mechanism?
 static Class $MFMailComposeViewController;
 
-template <typename Type_>
-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<WebPolicyDecisionListener>)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<NSFastEnumeration> *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]);