]> git.saurik.com Git - cydia.git/commitdiff
Disallow serializing ignored URLs to the state.
authorJay Freeman (saurik) <saurik@saurik.com>
Sat, 5 Mar 2011 11:54:19 +0000 (03:54 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 7 Mar 2011 10:41:37 +0000 (02:41 -0800)
CyteKit/WebView.h
CyteKit/WebView.mm
CyteKit/WebViewController.mm
MobileCydia.mm

index 91878b7e4aa8e772dca1d2eae0354a1e2873f09f..0c96f6f2b1f86026d1b8b06fd8be458c09ca8d7b 100644 (file)
 
 #include <JavaScriptCore/JavaScriptCore.h>
 
+enum CYWebPolicyDecision {
+    CYWebPolicyDecisionUnknown,
+    CYWebPolicyDecisionDownload,
+    CYWebPolicyDecisionIgnore,
+    CYWebPolicyDecisionUse,
+};
+
 @protocol CyteWebViewDelegate <UIWebViewDelegate>
 - (void) webView:(WebView *)view addMessageToConsole:(NSDictionary *)message;
 - (void) webView:(WebView *)view decidePolicyForNavigationAction:(NSDictionary *)action request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener;
 - (void) webView:(WebView *)view decidePolicyForNewWindowAction:(NSDictionary *)action request:(NSURLRequest *)request newFrameName:(NSString *)name decisionListener:(id<WebPolicyDecisionListener>)listener;
 - (void) webView:(WebView *)view didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame;
+- (void) webView:(WebView *)view didDecidePolicy:(CYWebPolicyDecision)decision forNavigationAction:(NSDictionary *)action request:(NSURLRequest *)request frame:(WebFrame *)frame;
 - (void) webView:(WebView *)view didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
 - (void) webView:(WebView *)view didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
 - (void) webView:(WebView *)view didFinishLoadForFrame:(WebFrame *)frame;
index 8fd362f6c40eb46da8cb051bbeb1baae0e7f0607..dd72f5ae045fd1969f7886c81732a6ec0231b7e6 100644 (file)
 #include "iPhonePrivate.h"
 
 // CYWebPolicyDecision* {{{
-enum CYWebPolicyDecision {
-    CYWebPolicyDecisionUnknown,
-    CYWebPolicyDecisionDownload,
-    CYWebPolicyDecisionIgnore,
-    CYWebPolicyDecisionUse,
-};
-
 @interface CYWebPolicyDecisionMediator : NSObject <
     WebPolicyDecisionListener
 > {
@@ -165,6 +158,7 @@ static void $UIWebViewWebViewDelegate$webView$addMessageToConsole$(UIWebViewWebV
         [delegate webView:view decidePolicyForNavigationAction:action request:request frame:frame decisionListener:mediator];
     if (![mediator decided] && [UIWebView instancesRespondToSelector:@selector(webView:decidePolicyForNavigationAction:request:frame:decisionListener:)])
         [super webView:view decidePolicyForNavigationAction:action request:request frame:frame decisionListener:mediator];
+    [delegate webView:view didDecidePolicy:[mediator decision] forNavigationAction:action request:request frame:frame];
     [mediator decide];
 }
 // }}}
index 39103fb58e020608649a5c26846fe2d2459cbef1..e67e6bc351693a66e5c87d4ecc075da036c7cb1b 100644 (file)
@@ -411,9 +411,7 @@ float CYScrollViewDecelerationRateNormal;
         if (!error_) {
             NSURL *url(request == nil ? nil : [request URL]);
 
-            if (request_ == nil || [self allowsNavigationAction] || [[request_ URL] isEqual:url])
-                request_ = request;
-            else {
+            if (request_ != nil && ![[request_ URL] isEqual:url] && ![self allowsNavigationAction]) {
                 if (url != nil)
                     [self pushRequest:request asPop:NO];
                 [listener ignore];
@@ -422,6 +420,11 @@ float CYScrollViewDecelerationRateNormal;
     }
 }
 
+- (void) webView:(WebView *)view didDecidePolicy:(CYWebPolicyDecision)decision forNavigationAction:(NSDictionary *)action request:(NSURLRequest *)request frame:(WebFrame *)frame {
+    if (decision == CYWebPolicyDecisionUse)
+        request_ = request;
+}
+
 - (void) webView:(WebView *)view decidePolicyForNewWindowAction:(NSDictionary *)action request:(NSURLRequest *)request newFrameName:(NSString *)frame decisionListener:(id<WebPolicyDecisionListener>)listener {
 #if LogBrowser
     NSLog(@"decidePolicyForNewWindowAction:%@ request:%@ newFrameName:%@", action, request, frame);
index 10a6f517beae818cc0be6da5af125c0a64d9ff6e..e6b6ca5ff2d6d5b620120b0ebdf299c7ec190c5e 100644 (file)
@@ -4472,7 +4472,7 @@ static NSMutableSet *Diversions_;
 }
 
 - (NSURL *) navigationURL {
-    return [NSURL URLWithString:[NSString stringWithFormat:@"cydia://url/%@", [[request_ URL] absoluteString]]];
+    return request_ == nil ? nil : [NSURL URLWithString:[NSString stringWithFormat:@"cydia://url/%@", [[request_ URL] absoluteString]]];
 }
 
 + (void) initialize {