You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2013/02/07 16:22:53 UTC
ios commit: [CB-2395] Fix CDVViewController UserAgent lock
Updated Branches:
refs/heads/master 53953e109 -> 9e39f7ef8
[CB-2395] Fix CDVViewController UserAgent lock
It was not being release when the view is unloaded mid-page load.
Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/9e39f7ef
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/9e39f7ef
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/9e39f7ef
Branch: refs/heads/master
Commit: 9e39f7ef8096fb15b38121ab0e245a3a958d9cbb
Parents: 53953e1
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Feb 7 10:21:48 2013 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Feb 7 10:21:48 2013 -0500
----------------------------------------------------------------------
CordovaLib/Classes/CDVInAppBrowser.m | 7 +++----
CordovaLib/Classes/CDVUserAgentUtil.h | 2 +-
CordovaLib/Classes/CDVUserAgentUtil.m | 10 +++++++---
CordovaLib/Classes/CDVViewController.m | 12 ++++--------
4 files changed, 15 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/9e39f7ef/CordovaLib/Classes/CDVInAppBrowser.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVInAppBrowser.m b/CordovaLib/Classes/CDVInAppBrowser.m
index 45bf705..fd4c5f4 100644
--- a/CordovaLib/Classes/CDVInAppBrowser.m
+++ b/CordovaLib/Classes/CDVInAppBrowser.m
@@ -374,15 +374,13 @@
- (void)viewDidUnload
{
[self.webView loadHTMLString:nil baseURL:nil];
+ [CDVUserAgentUtil releaseLock:&_userAgentLockToken];
[super viewDidUnload];
}
- (void)close
{
- if (_userAgentLockToken != 0) {
- [CDVUserAgentUtil releaseLock:_userAgentLockToken];
- _userAgentLockToken = 0;
- }
+ [CDVUserAgentUtil releaseLock:&_userAgentLockToken];
if ([self respondsToSelector:@selector(presentingViewController)]) {
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
@@ -398,6 +396,7 @@
- (void)navigateTo:(NSURL*)url
{
NSURLRequest* request = [NSURLRequest requestWithURL:url];
+
_requestedURL = url;
if (_userAgentLockToken != 0) {
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/9e39f7ef/CordovaLib/Classes/CDVUserAgentUtil.h
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVUserAgentUtil.h b/CordovaLib/Classes/CDVUserAgentUtil.h
index 662b674..4de382f 100644
--- a/CordovaLib/Classes/CDVUserAgentUtil.h
+++ b/CordovaLib/Classes/CDVUserAgentUtil.h
@@ -22,6 +22,6 @@
@interface CDVUserAgentUtil : NSObject
+ (NSString*)originalUserAgent;
+ (void)acquireLock:(void (^)(NSInteger lockToken))block;
-+ (void)releaseLock:(NSInteger)lockToken;
++ (void)releaseLock:(NSInteger*)lockToken;
+ (void)setUserAgent:(NSString*)value lockToken:(NSInteger)lockToken;
@end
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/9e39f7ef/CordovaLib/Classes/CDVUserAgentUtil.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVUserAgentUtil.m b/CordovaLib/Classes/CDVUserAgentUtil.m
index e2baef0..5c43c51 100644
--- a/CordovaLib/Classes/CDVUserAgentUtil.m
+++ b/CordovaLib/Classes/CDVUserAgentUtil.m
@@ -84,11 +84,14 @@ static NSMutableArray* gPendingSetUserAgentBlocks = nil;
}
}
-+ (void)releaseLock:(NSInteger)lockToken
++ (void)releaseLock:(NSInteger*)lockToken
{
- NSAssert(gCurrentLockToken == lockToken, @"Got token %d, expected %d", lockToken, gCurrentLockToken);
+ if (*lockToken == 0) {
+ return;
+ }
+ NSAssert(gCurrentLockToken == *lockToken, @"Got token %d, expected %d", *lockToken, gCurrentLockToken);
- VerboseLog(@"Released lock %d", lockToken);
+ VerboseLog(@"Released lock %d", *lockToken);
if ([gPendingSetUserAgentBlocks count] > 0) {
void (^block)() = [gPendingSetUserAgentBlocks objectAtIndex:0];
[gPendingSetUserAgentBlocks removeObjectAtIndex:0];
@@ -98,6 +101,7 @@ static NSMutableArray* gPendingSetUserAgentBlocks = nil;
} else {
gCurrentLockToken = 0;
}
+ *lockToken = 0;
}
+ (void)setUserAgent:(NSString*)value lockToken:(NSInteger)lockToken
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/9e39f7ef/CordovaLib/Classes/CDVViewController.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVViewController.m b/CordovaLib/Classes/CDVViewController.m
index 36ae785..6c19fa4 100644
--- a/CordovaLib/Classes/CDVViewController.m
+++ b/CordovaLib/Classes/CDVViewController.m
@@ -480,6 +480,7 @@
self.webView.delegate = nil;
self.webView = nil;
+ [CDVUserAgentUtil releaseLock:&_userAgentLockToken];
}
#pragma mark UIWebViewDelegate
@@ -499,10 +500,7 @@
*/
- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
- if (_userAgentLockToken != 0) {
- [CDVUserAgentUtil releaseLock:_userAgentLockToken];
- _userAgentLockToken = 0;
- }
+ [CDVUserAgentUtil releaseLock:&_userAgentLockToken];
/*
* Hide the Top Activity THROBBER in the Battery Bar
@@ -529,10 +527,7 @@
- (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error
{
- if (_userAgentLockToken != 0) {
- [CDVUserAgentUtil releaseLock:_userAgentLockToken];
- _userAgentLockToken = 0;
- }
+ [CDVUserAgentUtil releaseLock:&_userAgentLockToken];
NSLog(@"Failed to load webpage with error: %@", [error localizedDescription]);
@@ -958,6 +953,7 @@ BOOL gSplashScreenShown = NO;
self.webView.delegate = nil;
self.webView = nil;
+ [CDVUserAgentUtil releaseLock:&_userAgentLockToken];
[_commandQueue dispose];
[[self.pluginObjects allValues] makeObjectsPerformSelector:@selector(dispose)];
}