#include "CyteKit/IndirectDelegate.h"
#include "CyteKit/Localize.h"
#include "CyteKit/WebViewController.h"
-#include "CyteKit/PerlCompatibleRegEx.hpp"
+#include "CyteKit/RegEx.hpp"
#include "CyteKit/WebThreadLocked.hpp"
//#include <QuartzCore/CALayer.h>
// XXX: WebThreadCreateNSInvocation returns nil
#if ShowInternals
- fprintf(stderr, "[%s]R?%s\n", class_getName(self->isa), sel_getName(sel));
+ fprintf(stderr, "[%s]R?%s\n", class_getName(object_getClass(self)), sel_getName(sel));
#endif
return delegate_ == nil ? NO : [delegate_ respondsToSelector:sel];
return method;
#if ShowInternals
- fprintf(stderr, "[%s]S?%s\n", class_getName(self->isa), sel_getName(sel));
+ fprintf(stderr, "[%s]S?%s\n", class_getName(object_getClass(self)), sel_getName(sel));
#endif
if (delegate_ != nil)
// CyteWebViewDelegate {{{
- (void) webView:(WebView *)view addMessageToConsole:(NSDictionary *)message {
#if LogMessages
- static Pcre irritating("^(?"
+ static RegEx 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$");
+ ")\\n");
if (NSString *data = [message objectForKey:@"message"])
if (irritating(data))
NSLog(@"decidePolicyForNavigationAction:%@ request:%@ %@ frame:%@", action, request, [request allHTTPHeaderFields], frame);
#endif
+ NSURL *url(request == nil ? nil : [request URL]);
+ NSString *scheme([[url scheme] lowercaseString]);
+ NSString *absolute([[url absoluteString] lowercaseString]);
+
+ if (
+ [scheme isEqualToString:@"itms"] ||
+ [scheme isEqualToString:@"itmss"] ||
+ [scheme isEqualToString:@"itms-apps"] ||
+ [scheme isEqualToString:@"itms-appss"] ||
+ [absolute hasPrefix:@"http://itunes.apple.com/"] ||
+ [absolute hasPrefix:@"https://itunes.apple.com/"] ||
+ false) {
+ appstore_ = url;
+
+ UIAlertView *alert = [[[UIAlertView alloc]
+ initWithTitle:UCLocalize("APP_STORE_REDIRECT")
+ message:nil
+ delegate:self
+ cancelButtonTitle:UCLocalize("CANCEL")
+ otherButtonTitles:
+ UCLocalize("ALLOW"),
+ nil
+ ] autorelease];
+
+ [alert setContext:@"itmsappss"];
+ [alert show];
+
+ [listener ignore];
+ return;
+ }
+
if ([frame parentFrame] == nil) {
if (!error_) {
- NSURL *url(request == nil ? nil : [request URL]);
-
if (request_ != nil && ![[request_ URL] isEqual:url] && ![self allowsNavigationAction]) {
if (url != nil)
[self pushRequest:request forAction:action asPop:NO];
- (void) webView:(WebView *)view didDecidePolicy:(CYWebPolicyDecision)decision forNavigationAction:(NSDictionary *)action request:(NSURLRequest *)request frame:(WebFrame *)frame {
#if LogBrowser
- NSLog(@"didDecidePolicy:%u forNavigationAction:%@ request:%@ frame:%@", decision, action, request, [request allHTTPHeaderFields], frame);
+ NSLog(@"didDecidePolicy:%u forNavigationAction:%@ request:%@ %@ frame:%@", decision, action, request, [request allHTTPHeaderFields], frame);
#endif
if ([frame parentFrame] == nil) {
return request;
}
+- (NSURLRequest *) webThreadWebView:(WebView *)view resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)source {
+#if LogBrowser
+ NSLog(@"resource:%@ willSendRequest:%@ redirectResponse:%@ fromDataSource:%@", identifier, request, response, source);
+#endif
+
+ return request;
+}
+
- (bool) webView:(WebView *)view shouldRunJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
return [self _allowJavaScriptPanel];
}
challenge_ = nil;
+ [alert dismissWithClickedButtonIndex:-1 animated:YES];
+ } else if ([context isEqualToString:@"itmsappss"]) {
+ if (button == [alert cancelButtonIndex]) {
+ } else if (button == [alert firstOtherButtonIndex]) {
+ [delegate_ openURL:appstore_];
+ }
+
[alert dismissWithClickedButtonIndex:-1 animated:YES];
} else if ([context isEqualToString:@"submit"]) {
if (button == [alert cancelButtonIndex]) {