From: Jay Freeman (saurik) Date: Sat, 5 Mar 2011 11:54:19 +0000 (-0800) Subject: Disallow serializing ignored URLs to the state. X-Git-Tag: v1.1.0%b1~66 X-Git-Url: https://git.saurik.com/cydia.git/commitdiff_plain/d323285e7d6f4836a189d9419b716b7dbc8c2da6 Disallow serializing ignored URLs to the state. --- diff --git a/CyteKit/WebView.h b/CyteKit/WebView.h index 91878b7e..0c96f6f2 100644 --- a/CyteKit/WebView.h +++ b/CyteKit/WebView.h @@ -50,11 +50,19 @@ #include +enum CYWebPolicyDecision { + CYWebPolicyDecisionUnknown, + CYWebPolicyDecisionDownload, + CYWebPolicyDecisionIgnore, + CYWebPolicyDecisionUse, +}; + @protocol CyteWebViewDelegate - (void) webView:(WebView *)view addMessageToConsole:(NSDictionary *)message; - (void) webView:(WebView *)view decidePolicyForNavigationAction:(NSDictionary *)action request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener; - (void) webView:(WebView *)view decidePolicyForNewWindowAction:(NSDictionary *)action request:(NSURLRequest *)request newFrameName:(NSString *)name decisionListener:(id)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; diff --git a/CyteKit/WebView.mm b/CyteKit/WebView.mm index 8fd362f6..dd72f5ae 100644 --- a/CyteKit/WebView.mm +++ b/CyteKit/WebView.mm @@ -45,13 +45,6 @@ #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]; } // }}} diff --git a/CyteKit/WebViewController.mm b/CyteKit/WebViewController.mm index 39103fb5..e67e6bc3 100644 --- a/CyteKit/WebViewController.mm +++ b/CyteKit/WebViewController.mm @@ -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)listener { #if LogBrowser NSLog(@"decidePolicyForNewWindowAction:%@ request:%@ newFrameName:%@", action, request, frame); diff --git a/MobileCydia.mm b/MobileCydia.mm index 10a6f517..e6b6ca5f 100644 --- a/MobileCydia.mm +++ b/MobileCydia.mm @@ -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 {