You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sh...@apache.org on 2014/09/16 08:04:45 UTC
ios commit: CB-7560 - Tel and Mailto links don't work in iframe
Repository: cordova-ios
Updated Branches:
refs/heads/master d5f570efa -> cf367cb49
CB-7560 - Tel and Mailto links don't work in iframe
Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/cf367cb4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/cf367cb4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/cf367cb4
Branch: refs/heads/master
Commit: cf367cb49916196ce6009b54c4a6dfa9779be20c
Parents: d5f570e
Author: Shazron Abdullah <sh...@apache.org>
Authored: Mon Sep 15 23:04:38 2014 -0700
Committer: Shazron Abdullah <sh...@apache.org>
Committed: Mon Sep 15 23:04:38 2014 -0700
----------------------------------------------------------------------
CordovaLib/Classes/CDVWebViewDelegate.m | 13 ++++++++++++-
CordovaLibTests/CDVWebViewDelegateTests.m | 21 +++++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cf367cb4/CordovaLib/Classes/CDVWebViewDelegate.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVWebViewDelegate.m b/CordovaLib/Classes/CDVWebViewDelegate.m
index 6bac3fa..cdc3980 100644
--- a/CordovaLib/Classes/CDVWebViewDelegate.m
+++ b/CordovaLib/Classes/CDVWebViewDelegate.m
@@ -198,6 +198,17 @@ static NSString *stripFragment(NSString* url)
}
}
+- (BOOL)shouldLoadRequest:(NSURLRequest*)request
+{
+ NSString* scheme = [[request URL] scheme];
+
+ if ([scheme isEqualToString:@"mailto"] || [scheme isEqualToString:@"tel"]) {
+ return YES;
+ }
+
+ return [NSURLConnection canHandleRequest:request];
+}
+
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
BOOL shouldLoad = YES;
@@ -259,7 +270,7 @@ static NSString *stripFragment(NSString* url)
} else {
// Deny invalid URLs so that we don't get the case where we go straight from
// webViewShouldLoad -> webViewDidFailLoad (messes up _loadCount).
- shouldLoad = shouldLoad && [NSURLConnection canHandleRequest:request];
+ shouldLoad = shouldLoad && [self shouldLoadRequest:request];
}
VerboseLog(@"webView shouldLoad=%d (after) isTopLevelNavigation=%d state=%d loadCount=%d", shouldLoad, isTopLevelNavigation, _state, _loadCount);
}
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cf367cb4/CordovaLibTests/CDVWebViewDelegateTests.m
----------------------------------------------------------------------
diff --git a/CordovaLibTests/CDVWebViewDelegateTests.m b/CordovaLibTests/CDVWebViewDelegateTests.m
index 15af654..7edd189 100644
--- a/CordovaLibTests/CDVWebViewDelegateTests.m
+++ b/CordovaLibTests/CDVWebViewDelegateTests.m
@@ -21,6 +21,13 @@
#import <Cordova/CDVWebViewDelegate.h>
+@interface CDVWebViewDelegate ()
+
+// expose private interface
+- (BOOL)shouldLoadRequest:(NSURLRequest*)request;
+
+@end
+
@interface CDVWebViewDelegateTests : XCTestCase
@end
@@ -36,6 +43,20 @@
[super tearDown];
}
+- (void)testShouldLoadRequest
+{
+ CDVWebViewDelegate* wvd = [[CDVWebViewDelegate alloc] initWithDelegate:nil]; // not really testing delegate handling
+
+ NSURLRequest* mailtoUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:@"mailto:dev@cordova.apache.org"]];
+ NSURLRequest* telUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:@"tel:12345"]];
+ NSURLRequest* plainUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://apache.org"]];
+
+ XCTAssertTrue([wvd shouldLoadRequest:mailtoUrl], @"mailto urls should be allowed");
+ XCTAssertTrue([wvd shouldLoadRequest:telUrl], @"tel urls should be allowed");
+ // as long as this is in the whitelist it should pass
+ XCTAssertTrue([wvd shouldLoadRequest:plainUrl], @"http urls should be allowed");
+}
+
- (void)testFragmentIdentifiersWithHttpUrl
{
[self doTestFragmentIdentifiersWithBaseUrl:@"http://cordova.apache.org" fragment:@"myfragment"];