Merge branch 'wkwebview' into 4.0.x
Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/ef66b33c Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/ef66b33c Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/ef66b33c Branch: refs/heads/4.0.x Commit: ef66b33cb4f320bcc071ef233c7a96d874fbe05c Parents: c0085a8 270002c Author: Shazron Abdullah <shaz...@gmail.com> Authored: Fri Mar 6 16:11:37 2015 -0800 Committer: Shazron Abdullah <shaz...@gmail.com> Committed: Fri Mar 6 16:11:37 2015 -0800 ---------------------------------------------------------------------- CordovaLib/Classes/CDV.h | 3 +- CordovaLib/Classes/CDVAvailability.h | 3 +- CordovaLib/Classes/CDVCommandDelegate.h | 3 + CordovaLib/Classes/CDVCommandDelegateImpl.m | 23 +- CordovaLib/Classes/CDVCommandQueue.m | 33 +- CordovaLib/Classes/CDVHandleOpenURL.m | 30 +- CordovaLib/Classes/CDVPlugin.h | 17 +- CordovaLib/Classes/CDVPlugin.m | 48 ++- CordovaLib/Classes/CDVPluginResult.m | 2 +- CordovaLib/Classes/CDVUIWebViewDelegate.h | 41 ++ CordovaLib/Classes/CDVUIWebViewDelegate.m | 412 +++++++++++++++++++ CordovaLib/Classes/CDVUIWebViewEngine.h | 27 ++ CordovaLib/Classes/CDVUIWebViewEngine.m | 181 ++++++++ CordovaLib/Classes/CDVViewController.h | 8 +- CordovaLib/Classes/CDVViewController.m | 309 +++++--------- CordovaLib/Classes/CDVWebViewDelegate.h | 41 -- CordovaLib/Classes/CDVWebViewDelegate.m | 412 ------------------- CordovaLib/Classes/CDVWebViewEngineProtocol.h | 39 ++ .../Classes/NSDictionary+CordovaPreferences.h | 35 ++ .../Classes/NSDictionary+CordovaPreferences.m | 63 +++ CordovaLib/CordovaLib.xcodeproj/project.pbxproj | 57 ++- CordovaLib/cordova.js | 10 +- .../project/__CLI__.xcodeproj/project.pbxproj | 4 + .../__NON-CLI__.xcodeproj/project.pbxproj | 4 + bin/templates/project/www/index.html | 2 +- bin/templates/scripts/cordova/lib/list-devices | 2 +- tests/CordovaLibTests/CDVStartPageTests.m | 14 +- tests/CordovaLibTests/CDVUserAgentTest.m | 52 ++- tests/CordovaLibTests/CDVWebViewDelegateTests.m | 10 +- tests/CordovaLibTests/CDVWebViewTest.m | 6 +- 30 files changed, 1132 insertions(+), 759 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDV.h ---------------------------------------------------------------------- diff --cc CordovaLib/Classes/CDV.h index fa61a72,146e57b..7d5ec3f --- a/CordovaLib/Classes/CDV.h +++ b/CordovaLib/Classes/CDV.h @@@ -19,16 -19,29 +19,17 @@@ #import "CDVAvailability.h" #import "CDVAvailabilityDeprecated.h" +#import "CDVPlugin.h" +#import "CDVPluginResult.h" +#import "CDVViewController.h" #import "CDVCommandDelegate.h" -#import "CDVCommandDelegateImpl.h" -#import "CDVCommandQueue.h" -#import "CDVConfigParser.h" -#import "CDVDebug.h" +#import "CDVURLProtocol.h" #import "CDVInvokedUrlCommand.h" -#import "CDVJSON.h" +#import "CDVWhitelist.h" #import "CDVLocalStorage.h" + #import "CDVPlugin.h" + #import "CDVPluginResult.h" #import "CDVScreenOrientationDelegate.h" -#import "CDVShared.h" #import "CDVTimer.h" -#import "CDVUIWebViewDelegate.h" -#import "CDVUIWebViewEngine.h" -#import "CDVURLProtocol.h" #import "CDVUserAgentUtil.h" - #import "CDVWebViewDelegate.h" -#import "CDVViewController.h" -#import "CDVWebViewEngineProtocol.h" -#import "CDVWhitelist.h" -#import "NSArray+Comparisons.h" #import "NSData+Base64.h" -#import "NSDictionary+CordovaPreferences.h" -#import "NSDictionary+Extensions.h" -#import "NSMutableArray+QueueAdditions.h" -#import "UIDevice+Extensions.h" http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVCommandQueue.m ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVUIWebViewDelegate.m ---------------------------------------------------------------------- diff --cc CordovaLib/Classes/CDVUIWebViewDelegate.m index 0000000,929138f..a248245 mode 000000,100644..100644 --- a/CordovaLib/Classes/CDVUIWebViewDelegate.m +++ b/CordovaLib/Classes/CDVUIWebViewDelegate.m @@@ -1,0 -1,411 +1,412 @@@ + /* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + + // + // Testing shows: + // + // In all cases, webView.request.URL is the previous page's URL (or empty) during the didStartLoad callback. + // When loading a page with a redirect: + // 1. shouldStartLoading (requestURL is target page) + // 2. didStartLoading + // 3. shouldStartLoading (requestURL is redirect target) + // 4. didFinishLoad (request.URL is redirect target) + // + // Note the lack of a second didStartLoading ** + // + // When loading a page with iframes: + // 1. shouldStartLoading (requestURL is main page) + // 2. didStartLoading + // 3. shouldStartLoading (requestURL is one of the iframes) + // 4. didStartLoading + // 5. didFinishLoad + // 6. didFinishLoad + // + // Note there is no way to distinguish which didFinishLoad maps to which didStartLoad ** + // + // Loading a page by calling window.history.go(-1): + // 1. didStartLoading + // 2. didFinishLoad + // + // Note the lack of a shouldStartLoading call ** + // Actually - this is fixed on iOS6. iOS6 has a shouldStart. ** + // + // Loading a page by calling location.reload() + // 1. shouldStartLoading + // 2. didStartLoading + // 3. didFinishLoad + // + // Loading a page with an iframe that fails to load: + // 1. shouldStart (main page) + // 2. didStart + // 3. shouldStart (iframe) + // 4. didStart + // 5. didFailWithError + // 6. didFinish + // + // Loading a page with an iframe that fails to load due to an invalid URL: + // 1. shouldStart (main page) + // 2. didStart + // 3. shouldStart (iframe) + // 5. didFailWithError + // 6. didFinish + // + // This case breaks our logic since there is a missing didStart. To prevent this, + // we check URLs in shouldStart and return NO if they are invalid. + // + // Loading a page with an invalid URL + // 1. shouldStart (main page) + // 2. didFailWithError + // + // TODO: Record order when page is re-navigated before the first navigation finishes. + // + + #import "CDVUIWebViewDelegate.h" + + // #define VerboseLog NSLog -#define VerboseLog(...) do {} while (0) ++#define VerboseLog(...) do { \ ++} while (0) + + typedef enum { + STATE_IDLE = 0, + STATE_WAITING_FOR_LOAD_START = 1, + STATE_WAITING_FOR_LOAD_FINISH = 2, + STATE_IOS5_POLLING_FOR_LOAD_START = 3, + STATE_IOS5_POLLING_FOR_LOAD_FINISH = 4, + STATE_CANCELLED = 5 + } State; + + static NSString *stripFragment(NSString* url) + { + NSRange r = [url rangeOfString:@"#"]; + + if (r.location == NSNotFound) { + return url; + } + return [url substringToIndex:r.location]; + } + + @implementation CDVUIWebViewDelegate + + - (id)initWithDelegate:(NSObject <UIWebViewDelegate>*)delegate + { + self = [super init]; + if (self != nil) { + _delegate = delegate; + _loadCount = -1; + _state = STATE_IDLE; + } + return self; + } + + - (BOOL)request:(NSURLRequest*)newRequest isEqualToRequestAfterStrippingFragments:(NSURLRequest*)originalRequest + { + if (originalRequest.URL && newRequest.URL) { + NSString* originalRequestUrl = [originalRequest.URL absoluteString]; + NSString* newRequestUrl = [newRequest.URL absoluteString]; + + NSString* baseOriginalRequestUrl = stripFragment(originalRequestUrl); + NSString* baseNewRequestUrl = stripFragment(newRequestUrl); + return [baseOriginalRequestUrl isEqualToString:baseNewRequestUrl]; + } + + return NO; + } + + - (BOOL)isPageLoaded:(UIWebView*)webView + { + NSString* readyState = [webView stringByEvaluatingJavaScriptFromString:@"document.readyState"]; + + return [readyState isEqualToString:@"loaded"] || [readyState isEqualToString:@"complete"]; + } + + - (BOOL)isJsLoadTokenSet:(UIWebView*)webView + { + NSString* loadToken = [webView stringByEvaluatingJavaScriptFromString:@"window.__cordovaLoadToken"]; + + return [[NSString stringWithFormat:@"%ld", (long)_curLoadToken] isEqualToString:loadToken]; + } + + - (void)setLoadToken:(UIWebView*)webView + { + _curLoadToken += 1; + [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.__cordovaLoadToken=%ld", (long)_curLoadToken]]; + } + + - (NSString*)evalForCurrentURL:(UIWebView*)webView + { + return [webView stringByEvaluatingJavaScriptFromString:@"location.href"]; + } + + - (void)pollForPageLoadStart:(UIWebView*)webView + { + if (_state != STATE_IOS5_POLLING_FOR_LOAD_START) { + return; + } + if (![self isJsLoadTokenSet:webView]) { + VerboseLog(@"Polled for page load start. result = YES!"); + _state = STATE_IOS5_POLLING_FOR_LOAD_FINISH; + [self setLoadToken:webView]; + if ([_delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [_delegate webViewDidStartLoad:webView]; + } + [self pollForPageLoadFinish:webView]; + } else { + VerboseLog(@"Polled for page load start. result = NO"); + // Poll only for 1 second, and then fall back on checking only when delegate methods are called. + ++_loadStartPollCount; + if (_loadStartPollCount < (1000 * .05)) { + [self performSelector:@selector(pollForPageLoadStart:) withObject:webView afterDelay:.05]; + } + } + } + + - (void)pollForPageLoadFinish:(UIWebView*)webView + { + if (_state != STATE_IOS5_POLLING_FOR_LOAD_FINISH) { + return; + } + if ([self isPageLoaded:webView]) { + VerboseLog(@"Polled for page load finish. result = YES!"); + _state = STATE_IDLE; + if ([_delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { + [_delegate webViewDidFinishLoad:webView]; + } + } else { + VerboseLog(@"Polled for page load finish. result = NO"); + [self performSelector:@selector(pollForPageLoadFinish:) withObject:webView afterDelay:.05]; + } + } + + - (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; + + if ([_delegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) { + shouldLoad = [_delegate webView:webView shouldStartLoadWithRequest:request navigationType:navigationType]; + } + + VerboseLog(@"webView shouldLoad=%d (before) state=%d loadCount=%d URL=%@", shouldLoad, _state, _loadCount, request.URL); + + if (shouldLoad) { + // When devtools refresh occurs, it blindly uses the same request object. If a history.replaceState() has occured, then + // mainDocumentURL != URL even though it's a top-level navigation. + BOOL isDevToolsRefresh = (request == webView.request); + BOOL isTopLevelNavigation = isDevToolsRefresh || [request.URL isEqual:[request mainDocumentURL]]; + if (isTopLevelNavigation) { + // Ignore hash changes that don't navigate to a different page. + // webView.request does actually update when history.replaceState() gets called. + if ([self request:request isEqualToRequestAfterStrippingFragments:webView.request]) { + NSString* prevURL = [self evalForCurrentURL:webView]; + if ([prevURL isEqualToString:[request.URL absoluteString]]) { + VerboseLog(@"Page reload detected."); + } else { + VerboseLog(@"Detected hash change shouldLoad"); + return shouldLoad; + } + } + + switch (_state) { + case STATE_WAITING_FOR_LOAD_FINISH: + // Redirect case. + // We expect loadCount == 1. + if (_loadCount != 1) { + NSLog(@"CDVWebViewDelegate: Detected redirect when loadCount=%ld", (long)_loadCount); + } + break; + + case STATE_IDLE: + case STATE_IOS5_POLLING_FOR_LOAD_START: + case STATE_CANCELLED: + // Page navigation start. + _loadCount = 0; + _state = STATE_WAITING_FOR_LOAD_START; + break; + + default: + { + _loadCount = 0; + _state = STATE_WAITING_FOR_LOAD_START; + NSString* description = [NSString stringWithFormat:@"CDVWebViewDelegate: Navigation started when state=%ld", (long)_state]; + NSLog(@"%@", description); + if ([_delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { + NSDictionary* errorDictionary = @{NSLocalizedDescriptionKey : description}; + NSError* error = [[NSError alloc] initWithDomain:@"CDVUIWebViewDelegate" code:1 userInfo:errorDictionary]; + [_delegate webView:webView didFailLoadWithError:error]; + } + } + } + } else { + // Deny invalid URLs so that we don't get the case where we go straight from + // webViewShouldLoad -> webViewDidFailLoad (messes up _loadCount). + shouldLoad = shouldLoad && [self shouldLoadRequest:request]; + } + VerboseLog(@"webView shouldLoad=%d (after) isTopLevelNavigation=%d state=%d loadCount=%d", shouldLoad, isTopLevelNavigation, _state, _loadCount); + } + return shouldLoad; + } + + - (void)webViewDidStartLoad:(UIWebView*)webView + { + VerboseLog(@"webView didStartLoad (before). state=%d loadCount=%d", _state, _loadCount); + BOOL fireCallback = NO; + switch (_state) { + case STATE_IDLE: + if (IsAtLeastiOSVersion(@"6.0")) { + break; + } + // If history.go(-1) is used pre-iOS6, the shouldStartLoadWithRequest function is not called. + // Without shouldLoad, we can't distinguish an iframe from a top-level navigation. + // We could try to distinguish using [UIWebView canGoForward], but that's too much complexity, + // and would work only on the first time it was used. + + // Our work-around is to set a JS variable and poll until it disappears (from a navigation). + _state = STATE_IOS5_POLLING_FOR_LOAD_START; + _loadStartPollCount = 0; + [self setLoadToken:webView]; + [self pollForPageLoadStart:webView]; + break; + + case STATE_CANCELLED: + fireCallback = YES; + _state = STATE_WAITING_FOR_LOAD_FINISH; + _loadCount += 1; + break; + + case STATE_WAITING_FOR_LOAD_START: + if (_loadCount != 0) { + NSLog(@"CDVWebViewDelegate: Unexpected loadCount in didStart. count=%ld", (long)_loadCount); + } + fireCallback = YES; + _state = STATE_WAITING_FOR_LOAD_FINISH; + _loadCount = 1; + break; + + case STATE_WAITING_FOR_LOAD_FINISH: + _loadCount += 1; + break; + + case STATE_IOS5_POLLING_FOR_LOAD_START: + [self pollForPageLoadStart:webView]; + break; + + case STATE_IOS5_POLLING_FOR_LOAD_FINISH: + [self pollForPageLoadFinish:webView]; + break; + + default: + NSLog(@"CDVWebViewDelegate: Unexpected didStart with state=%ld loadCount=%ld", (long)_state, (long)_loadCount); + } + VerboseLog(@"webView didStartLoad (after). state=%d loadCount=%d fireCallback=%d", _state, _loadCount, fireCallback); + if (fireCallback && [_delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [_delegate webViewDidStartLoad:webView]; + } + } + + - (void)webViewDidFinishLoad:(UIWebView*)webView + { + VerboseLog(@"webView didFinishLoad (before). state=%d loadCount=%d", _state, _loadCount); + BOOL fireCallback = NO; + switch (_state) { + case STATE_IDLE: + break; + + case STATE_WAITING_FOR_LOAD_START: + NSLog(@"CDVWebViewDelegate: Unexpected didFinish while waiting for load start."); + break; + + case STATE_WAITING_FOR_LOAD_FINISH: + if (_loadCount == 1) { + fireCallback = YES; + _state = STATE_IDLE; + } + _loadCount -= 1; + break; + + case STATE_IOS5_POLLING_FOR_LOAD_START: + [self pollForPageLoadStart:webView]; + break; + + case STATE_IOS5_POLLING_FOR_LOAD_FINISH: + [self pollForPageLoadFinish:webView]; + break; + } + VerboseLog(@"webView didFinishLoad (after). state=%d loadCount=%d fireCallback=%d", _state, _loadCount, fireCallback); + if (fireCallback && [_delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { + [_delegate webViewDidFinishLoad:webView]; + } + } + + - (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error + { + VerboseLog(@"webView didFailLoad (before). state=%d loadCount=%d", _state, _loadCount); + BOOL fireCallback = NO; + + switch (_state) { + case STATE_IDLE: + break; + + case STATE_WAITING_FOR_LOAD_START: + if ([error code] == NSURLErrorCancelled) { + _state = STATE_CANCELLED; + } else { + _state = STATE_IDLE; + } + fireCallback = YES; + break; + + case STATE_WAITING_FOR_LOAD_FINISH: + if ([error code] != NSURLErrorCancelled) { + if (_loadCount == 1) { + _state = STATE_IDLE; + fireCallback = YES; + } + _loadCount = -1; + } else { + fireCallback = YES; + _state = STATE_CANCELLED; + _loadCount -= 1; + } + break; + + case STATE_IOS5_POLLING_FOR_LOAD_START: + [self pollForPageLoadStart:webView]; + break; + + case STATE_IOS5_POLLING_FOR_LOAD_FINISH: + [self pollForPageLoadFinish:webView]; + break; + } + VerboseLog(@"webView didFailLoad (after). state=%d loadCount=%d, fireCallback=%d", _state, _loadCount, fireCallback); + if (fireCallback && [_delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { + [_delegate webView:webView didFailLoadWithError:error]; + } + } + + @end http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVUIWebViewEngine.m ---------------------------------------------------------------------- diff --cc CordovaLib/Classes/CDVUIWebViewEngine.m index 0000000,cc15d52..c222e15 mode 000000,100644..100644 --- a/CordovaLib/Classes/CDVUIWebViewEngine.m +++ b/CordovaLib/Classes/CDVUIWebViewEngine.m @@@ -1,0 -1,181 +1,181 @@@ + /* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + + #import "CDVUIWebViewEngine.h" + #import "CDVUIWebViewDelegate.h" + #import "NSDictionary+CordovaPreferences.h" + + #import <objc/message.h> + + @interface CDVUIWebViewEngine () + + @property (nonatomic, strong, readwrite) UIView* engineWebView; + @property (nonatomic, strong, readwrite) id <UIWebViewDelegate> uiWebViewDelegate; + + @end + + @implementation CDVUIWebViewEngine + + @synthesize engineWebView = _engineWebView; + + - (instancetype)initWithFrame:(CGRect)frame + { + self = [super init]; + if (self) { + self.engineWebView = [[UIWebView alloc] initWithFrame:frame]; + NSLog(@"Using UIWebView"); + } + + return self; + } + + - (void)pluginInitialize + { + // viewController would be available now. we attempt to set all possible delegates to it, by default + + UIWebView* uiWebView = (UIWebView*)_engineWebView; + + if ([self.viewController conformsToProtocol:@protocol(UIWebViewDelegate)]) { + self.uiWebViewDelegate = [[CDVUIWebViewDelegate alloc] initWithDelegate:(id <UIWebViewDelegate>)self.viewController]; + uiWebView.delegate = self.uiWebViewDelegate; + } + + [self updateSettings:self.commandDelegate.settings]; + } + + - (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void (^)(id, NSError*))completionHandler + { - NSString* ret = [(UIWebView*)_engineWebView stringByEvaluatingJavaScriptFromString : javaScriptString]; ++ NSString* ret = [(UIWebView*)_engineWebView stringByEvaluatingJavaScriptFromString:javaScriptString]; + + if (completionHandler) { + completionHandler(ret, nil); + } + } + + - (id)loadRequest:(NSURLRequest*)request + { - [(UIWebView*)_engineWebView loadRequest : request]; ++ [(UIWebView*)_engineWebView loadRequest:request]; + return nil; + } + + - (id)loadHTMLString:(NSString*)string baseURL:(NSURL*)baseURL + { - [(UIWebView*)_engineWebView loadHTMLString : string baseURL : baseURL]; ++ [(UIWebView*)_engineWebView loadHTMLString:string baseURL:baseURL]; + return nil; + } + + - (void)updateSettings:(NSDictionary*)settings + { + UIWebView* uiWebView = (UIWebView*)_engineWebView; + + uiWebView.scalesPageToFit = [settings cordovaBoolSettingForKey:@"EnableViewportScale" defaultValue:NO]; + uiWebView.allowsInlineMediaPlayback = [settings cordovaBoolSettingForKey:@"AllowInlineMediaPlayback" defaultValue:NO]; + uiWebView.mediaPlaybackRequiresUserAction = [settings cordovaBoolSettingForKey:@"MediaPlaybackRequiresUserAction" defaultValue:YES]; + uiWebView.mediaPlaybackAllowsAirPlay = [settings cordovaBoolSettingForKey:@"MediaPlaybackAllowsAirPlay" defaultValue:YES]; + uiWebView.keyboardDisplayRequiresUserAction = [settings cordovaBoolSettingForKey:@"KeyboardDisplayRequiresUserAction" defaultValue:YES]; + uiWebView.suppressesIncrementalRendering = [settings cordovaBoolSettingForKey:@"SuppressesIncrementalRendering" defaultValue:NO]; + uiWebView.gapBetweenPages = [settings cordovaFloatSettingForKey:@"GapBetweenPages" defaultValue:0.0]; + uiWebView.pageLength = [settings cordovaFloatSettingForKey:@"PageLength" defaultValue:0.0]; + + id prefObj = nil; + + // By default, DisallowOverscroll is false (thus bounce is allowed) + BOOL bounceAllowed = !([settings cordovaBoolSettingForKey:@"DisallowOverscroll" defaultValue:NO]); + + // prevent webView from bouncing + if (!bounceAllowed) { + if ([self.webView respondsToSelector:@selector(scrollView)]) { + ((UIScrollView*)[uiWebView scrollView]).bounces = NO; + } else { + for (id subview in self.webView.subviews) { + if ([[subview class] isSubclassOfClass:[UIScrollView class]]) { + ((UIScrollView*)subview).bounces = NO; + } + } + } + } + + NSString* decelerationSetting = [settings cordovaSettingForKey:@"UIWebViewDecelerationSpeed"]; - if (![@"fast" isEqualToString : decelerationSetting]) { ++ if (![@"fast" isEqualToString:decelerationSetting]) { + [uiWebView.scrollView setDecelerationRate:UIScrollViewDecelerationRateNormal]; + } + + NSInteger paginationBreakingMode = 0; // default - UIWebPaginationBreakingModePage + prefObj = [settings cordovaSettingForKey:@"PaginationBreakingMode"]; + if (prefObj != nil) { + NSArray* validValues = @[@"page", @"column"]; + NSString* prefValue = [validValues objectAtIndex:0]; + + if ([prefObj isKindOfClass:[NSString class]]) { + prefValue = prefObj; + } + + paginationBreakingMode = [validValues indexOfObject:[prefValue lowercaseString]]; + if (paginationBreakingMode == NSNotFound) { + paginationBreakingMode = 0; + } + } + uiWebView.paginationBreakingMode = paginationBreakingMode; + + NSInteger paginationMode = 0; // default - UIWebPaginationModeUnpaginated + prefObj = [settings cordovaSettingForKey:@"PaginationMode"]; + if (prefObj != nil) { + NSArray* validValues = @[@"unpaginated", @"lefttoright", @"toptobottom", @"bottomtotop", @"righttoleft"]; + NSString* prefValue = [validValues objectAtIndex:0]; + + if ([prefObj isKindOfClass:[NSString class]]) { + prefValue = prefObj; + } + + paginationMode = [validValues indexOfObject:[prefValue lowercaseString]]; + if (paginationMode == NSNotFound) { + paginationMode = 0; + } + } + uiWebView.paginationMode = paginationMode; + } + + - (void)updateWithInfo:(NSDictionary*)info + { + UIWebView* uiWebView = (UIWebView*)_engineWebView; + + id <UIWebViewDelegate> uiWebViewDelegate = [info objectForKey:kCDVWebViewEngineUIWebViewDelegate]; + NSDictionary* settings = [info objectForKey:kCDVWebViewEngineWebViewPreferences]; + + if (uiWebViewDelegate && + [uiWebViewDelegate conformsToProtocol:@protocol(UIWebViewDelegate)]) { + self.uiWebViewDelegate = [[CDVUIWebViewDelegate alloc] initWithDelegate:(id <UIWebViewDelegate>)self.viewController]; + uiWebView.delegate = self.uiWebViewDelegate; + } + + if (settings && [settings isKindOfClass:[NSDictionary class]]) { + [self updateSettings:settings]; + } + } + + // This forwards the methods that are in the header that are not implemented here. + // Both WKWebView and UIWebView implement the below: + // loadHTMLString:baseURL: + // loadRequest: + - (id)forwardingTargetForSelector:(SEL)aSelector + { + return _engineWebView; + } + + @end http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVViewController.m ---------------------------------------------------------------------- diff --cc CordovaLib/Classes/CDVViewController.m index f368ceb,946c723..6ce262c --- a/CordovaLib/Classes/CDVViewController.m +++ b/CordovaLib/Classes/CDVViewController.m @@@ -19,12 -19,12 +19,13 @@@ #import <objc/message.h> #import "CDV.h" - #import "CDVCommandDelegateImpl.h" + #import "CDVUIWebViewDelegate.h" #import "CDVConfigParser.h" #import "CDVUserAgentUtil.h" - #import "CDVWebViewDelegate.h" #import <AVFoundation/AVFoundation.h> + #import "NSDictionary+CordovaPreferences.h" #import "CDVHandleOpenURL.h" ++#import "CDVCommandDelegateImpl.h" #define degreesToRadian(x) (M_PI * (x) / 180.0) http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/CordovaLib.xcodeproj/project.pbxproj ---------------------------------------------------------------------- diff --cc CordovaLib/CordovaLib.xcodeproj/project.pbxproj index e91ade2,a1677ef..45cc66b --- a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj +++ b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj @@@ -13,33 -14,50 +13,41 @@@ 3034979C1513D56A0090E688 /* CDVLocalStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3034979A1513D56A0090E688 /* CDVLocalStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3034979E1513D56A0090E688 /* CDVLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3034979B1513D56A0090E688 /* CDVLocalStorage.m */; }; 30392E4E14F4FCAB00B9E0B8 /* CDVAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 30392E4D14F4FCAB00B9E0B8 /* CDVAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3062D120151D0EDB000D9128 /* UIDevice+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3062D11E151D0EDB000D9128 /* UIDevice+Extensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3062D122151D0EDB000D9128 /* UIDevice+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3062D11F151D0EDB000D9128 /* UIDevice+Extensions.m */; }; ++ 306ADADD1AAA739800CAC885 /* CDVHandleOpenURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 306ADADC1AAA739800CAC885 /* CDVHandleOpenURL.h */; }; ++ 306ADAE01AAA73BA00CAC885 /* CDVHandleOpenURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 306ADADE1AAA73A800CAC885 /* CDVHandleOpenURL.m */; }; ++ 306ADAE51AAA73E100CAC885 /* CDVUIWebViewEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 306ADAE11AAA73E100CAC885 /* CDVUIWebViewEngine.m */; }; ++ 306ADAE61AAA73E100CAC885 /* CDVWebViewEngineProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 306ADAE21AAA73E100CAC885 /* CDVWebViewEngineProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; ++ 306ADAE71AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 306ADAE31AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h */; }; ++ 306ADAE81AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 306ADAE41AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m */; }; ++ 306ADAEA1AAA745400CAC885 /* CDVCommandQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3B3545161CB44D003DBE7D /* CDVCommandQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; ++ 306ADAEB1AAA747100CAC885 /* NSMutableArray+QueueAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E563CD13E217EC00C949AA /* NSMutableArray+QueueAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; ++ 306ADAEC1AAA753300CAC885 /* CDVCommandDelegateImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3B357A161F2A44003DBE7D /* CDVCommandDelegateImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3073E9ED1656D51200957977 /* CDVScreenOrientationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3073E9EC1656D51200957977 /* CDVScreenOrientationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3083EB981A0AF23A00548672 /* CDVUIWebViewEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3083EB961A0AF23A00548672 /* CDVUIWebViewEngine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3083EB991A0AF23A00548672 /* CDVUIWebViewEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 3083EB971A0AF23A00548672 /* CDVUIWebViewEngine.m */; }; - 30B7A65C1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B7A65A1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30B7A65D1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B7A65B1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.m */; }; 30C684801406CB38004C1A8E /* CDVWhitelist.h in Headers */ = {isa = PBXBuildFile; fileRef = 30C6847E1406CB38004C1A8E /* CDVWhitelist.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30C684821406CB38004C1A8E /* CDVWhitelist.m in Sources */ = {isa = PBXBuildFile; fileRef = 30C6847F1406CB38004C1A8E /* CDVWhitelist.m */; }; 30C684941407044B004C1A8E /* CDVURLProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 30C684921407044A004C1A8E /* CDVURLProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30C684961407044B004C1A8E /* CDVURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 30C684931407044A004C1A8E /* CDVURLProtocol.m */; }; - 30D552E11A0AB1F5002007BB /* CDVWebViewEngineProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 30D552E01A0AB1F5002007BB /* CDVWebViewEngineProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30E33AF213A7E24B00594D64 /* CDVPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E33AF013A7E24B00594D64 /* CDVPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30E33AF313A7E24B00594D64 /* CDVPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 30E33AF113A7E24B00594D64 /* CDVPlugin.m */; }; - 30E563CF13E217EC00C949AA /* NSMutableArray+QueueAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E563CD13E217EC00C949AA /* NSMutableArray+QueueAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30E563D013E217EC00C949AA /* NSMutableArray+QueueAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 30E563CE13E217EC00C949AA /* NSMutableArray+QueueAdditions.m */; }; -- 30E6B8CD1A8ADD900025B9EE /* CDVHandleOpenURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E6B8CB1A8ADD900025B9EE /* CDVHandleOpenURL.h */; }; -- 30E6B8CE1A8ADD900025B9EE /* CDVHandleOpenURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 30E6B8CC1A8ADD900025B9EE /* CDVHandleOpenURL.m */; }; - 30F3930B169F839700B22307 /* CDVJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 30F39309169F839700B22307 /* CDVJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30F3930C169F839700B22307 /* CDVJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F3930A169F839700B22307 /* CDVJSON.m */; }; 30F5EBAB14CA26E700987760 /* CDVCommandDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 30F5EBA914CA26E700987760 /* CDVCommandDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7E14B5A81705050A0032169E /* CDVTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E14B5A61705050A0032169E /* CDVTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7E14B5A91705050A0032169E /* CDVTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E14B5A71705050A0032169E /* CDVTimer.m */; }; - 7E22B88519E4C0210026F95E /* CDVAvailabilityDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E22B88419E4C0210026F95E /* CDVAvailabilityDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8852C43A14B65FD800F0E735 /* CDVViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8852C43614B65FD800F0E735 /* CDVViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8852C43C14B65FD800F0E735 /* CDVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8852C43714B65FD800F0E735 /* CDVViewController.m */; }; - 8887FD681090FBE7009987E8 /* NSDictionary+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD281090FBE7009987E8 /* NSDictionary+Extensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8887FD691090FBE7009987E8 /* NSDictionary+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD291090FBE7009987E8 /* NSDictionary+Extensions.m */; }; 8887FD741090FBE7009987E8 /* CDVInvokedUrlCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD341090FBE7009987E8 /* CDVInvokedUrlCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8887FD751090FBE7009987E8 /* CDVInvokedUrlCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */; }; - 8887FD8F1090FBE7009987E8 /* NSData+Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD501090FBE7009987E8 /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8887FD901090FBE7009987E8 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD511090FBE7009987E8 /* NSData+Base64.m */; }; - EB3B3547161CB44D003DBE7D /* CDVCommandQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3B3545161CB44D003DBE7D /* CDVCommandQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; EB3B3548161CB44D003DBE7D /* CDVCommandQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = EB3B3546161CB44D003DBE7D /* CDVCommandQueue.m */; }; - EB3B357C161F2A45003DBE7D /* CDVCommandDelegateImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3B357A161F2A44003DBE7D /* CDVCommandDelegateImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; EB3B357D161F2A45003DBE7D /* CDVCommandDelegateImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = EB3B357B161F2A45003DBE7D /* CDVCommandDelegateImpl.m */; }; + EB6A98401A729CD70013FCDB /* CDVAvailabilityDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6A983F1A729CD70013FCDB /* CDVAvailabilityDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; }; EB6A98541A77EE470013FCDB /* CDVJSON_private.m in Sources */ = {isa = PBXBuildFile; fileRef = EB6A98521A77EE470013FCDB /* CDVJSON_private.m */; }; + EB6A98571A77FA430013FCDB /* NSData+Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD501090FBE7009987E8 /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; EB96673B16A8970A00D86CDF /* CDVUserAgentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = EB96673916A8970900D86CDF /* CDVUserAgentUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; EB96673C16A8970A00D86CDF /* CDVUserAgentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = EB96673A16A8970900D86CDF /* CDVUserAgentUtil.m */; }; - EBFF4DBC16D3FE2E008F452B /* CDVWebViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF4DBA16D3FE2E008F452B /* CDVWebViewDelegate.m */; }; - EBFF4DBD16D3FE2E008F452B /* CDVWebViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFF4DBB16D3FE2E008F452B /* CDVWebViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBA3557315ABD38C00F4DE24 /* NSArray+Comparisons.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA3557115ABD38C00F4DE24 /* NSArray+Comparisons.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBA3557515ABD38C00F4DE24 /* NSArray+Comparisons.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA3557215ABD38C00F4DE24 /* NSArray+Comparisons.m */; }; + EBFF4DBC16D3FE2E008F452B /* CDVUIWebViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF4DBA16D3FE2E008F452B /* CDVUIWebViewDelegate.m */; }; - EBFF4DBD16D3FE2E008F452B /* CDVUIWebViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFF4DBB16D3FE2E008F452B /* CDVUIWebViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; ++ EBFF4DBD16D3FE2E008F452B /* CDVUIWebViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFF4DBB16D3FE2E008F452B /* CDVUIWebViewDelegate.h */; }; F858FBC6166009A8007DA594 /* CDVConfigParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F858FBC4166009A8007DA594 /* CDVConfigParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; F858FBC7166009A8007DA594 /* CDVConfigParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F858FBC5166009A8007DA594 /* CDVConfigParser.m */; }; /* End PBXBuildFile section */ @@@ -53,7 -72,13 +61,14 @@@ 3034979A1513D56A0090E688 /* CDVLocalStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVLocalStorage.h; path = Classes/CDVLocalStorage.h; sourceTree = "<group>"; }; 3034979B1513D56A0090E688 /* CDVLocalStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVLocalStorage.m; path = Classes/CDVLocalStorage.m; sourceTree = "<group>"; }; 30392E4D14F4FCAB00B9E0B8 /* CDVAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVAvailability.h; path = Classes/CDVAvailability.h; sourceTree = "<group>"; }; - 3062D11E151D0EDB000D9128 /* UIDevice+Extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIDevice+Extensions.h"; path = "Classes/UIDevice+Extensions.h"; sourceTree = "<group>"; }; - 3062D11F151D0EDB000D9128 /* UIDevice+Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIDevice+Extensions.m"; path = "Classes/UIDevice+Extensions.m"; sourceTree = "<group>"; }; ++ 306ADADC1AAA739800CAC885 /* CDVHandleOpenURL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVHandleOpenURL.h; path = Classes/CDVHandleOpenURL.h; sourceTree = "<group>"; }; ++ 306ADADE1AAA73A800CAC885 /* CDVHandleOpenURL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVHandleOpenURL.m; path = Classes/CDVHandleOpenURL.m; sourceTree = "<group>"; }; ++ 306ADAE11AAA73E100CAC885 /* CDVUIWebViewEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVUIWebViewEngine.m; path = Classes/CDVUIWebViewEngine.m; sourceTree = "<group>"; }; ++ 306ADAE21AAA73E100CAC885 /* CDVWebViewEngineProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVWebViewEngineProtocol.h; path = Classes/CDVWebViewEngineProtocol.h; sourceTree = "<group>"; }; ++ 306ADAE31AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+CordovaPreferences.h"; path = "Classes/NSDictionary+CordovaPreferences.h"; sourceTree = "<group>"; }; ++ 306ADAE41AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+CordovaPreferences.m"; path = "Classes/NSDictionary+CordovaPreferences.m"; sourceTree = "<group>"; }; 3073E9EC1656D51200957977 /* CDVScreenOrientationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVScreenOrientationDelegate.h; path = Classes/CDVScreenOrientationDelegate.h; sourceTree = "<group>"; }; - 3083EB961A0AF23A00548672 /* CDVUIWebViewEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVUIWebViewEngine.h; path = Classes/CDVUIWebViewEngine.h; sourceTree = "<group>"; }; - 3083EB971A0AF23A00548672 /* CDVUIWebViewEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVUIWebViewEngine.m; path = Classes/CDVUIWebViewEngine.m; sourceTree = "<group>"; }; - 30B7A65A1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+CordovaPreferences.h"; path = "Classes/NSDictionary+CordovaPreferences.h"; sourceTree = "<group>"; }; + 30B7A65B1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+CordovaPreferences.m"; path = "Classes/NSDictionary+CordovaPreferences.m"; sourceTree = "<group>"; }; 30C6847E1406CB38004C1A8E /* CDVWhitelist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVWhitelist.h; path = Classes/CDVWhitelist.h; sourceTree = "<group>"; }; 30C6847F1406CB38004C1A8E /* CDVWhitelist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVWhitelist.m; path = Classes/CDVWhitelist.m; sourceTree = "<group>"; }; 30C684921407044A004C1A8E /* CDVURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVURLProtocol.h; path = Classes/CDVURLProtocol.h; sourceTree = "<group>"; }; @@@ -62,14 -88,31 +77,12 @@@ 30E33AF113A7E24B00594D64 /* CDVPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVPlugin.m; path = Classes/CDVPlugin.m; sourceTree = "<group>"; }; 30E563CD13E217EC00C949AA /* NSMutableArray+QueueAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+QueueAdditions.h"; path = "Classes/NSMutableArray+QueueAdditions.h"; sourceTree = "<group>"; }; 30E563CE13E217EC00C949AA /* NSMutableArray+QueueAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+QueueAdditions.m"; path = "Classes/NSMutableArray+QueueAdditions.m"; sourceTree = "<group>"; }; -- 30E6B8CB1A8ADD900025B9EE /* CDVHandleOpenURL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVHandleOpenURL.h; path = Classes/CDVHandleOpenURL.h; sourceTree = "<group>"; }; -- 30E6B8CC1A8ADD900025B9EE /* CDVHandleOpenURL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVHandleOpenURL.m; path = Classes/CDVHandleOpenURL.m; sourceTree = "<group>"; }; - 30F39309169F839700B22307 /* CDVJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVJSON.h; path = Classes/CDVJSON.h; sourceTree = "<group>"; }; - 30F3930A169F839700B22307 /* CDVJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVJSON.m; path = Classes/CDVJSON.m; sourceTree = "<group>"; }; 30F5EBA914CA26E700987760 /* CDVCommandDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVCommandDelegate.h; path = Classes/CDVCommandDelegate.h; sourceTree = "<group>"; }; - 686357AA141002F100DF4CF2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 686357AC141002F100DF4CF2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 686357AE141002F100DF4CF2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 686357CC14100AAD00DF4CF2 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; }; - 686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 686357CF14100ADB00DF4CF2 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 686357D014100ADE00DF4CF2 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - 686357D214100AE700DF4CF2 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - 686357D414100AF200DF4CF2 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - 686357DC14100B1600DF4CF2 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; 68A32D7114102E1C006B237C /* libCordova.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCordova.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 68A32D7414103017006B237C /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; 7E14B5A61705050A0032169E /* CDVTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVTimer.h; path = Classes/CDVTimer.h; sourceTree = "<group>"; }; 7E14B5A71705050A0032169E /* CDVTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVTimer.m; path = Classes/CDVTimer.m; sourceTree = "<group>"; }; - 7E22B88419E4C0210026F95E /* CDVAvailabilityDeprecated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVAvailabilityDeprecated.h; path = Classes/CDVAvailabilityDeprecated.h; sourceTree = "<group>"; }; - 8220B5C316D5427E00EC3921 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; 8852C43614B65FD800F0E735 /* CDVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVViewController.h; path = Classes/CDVViewController.h; sourceTree = "<group>"; }; 8852C43714B65FD800F0E735 /* CDVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVViewController.m; path = Classes/CDVViewController.m; sourceTree = "<group>"; }; - 8887FD281090FBE7009987E8 /* NSDictionary+Extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Extensions.h"; path = "Classes/NSDictionary+Extensions.h"; sourceTree = "<group>"; }; - 8887FD291090FBE7009987E8 /* NSDictionary+Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Extensions.m"; path = "Classes/NSDictionary+Extensions.m"; sourceTree = "<group>"; }; 8887FD341090FBE7009987E8 /* CDVInvokedUrlCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVInvokedUrlCommand.h; path = Classes/CDVInvokedUrlCommand.h; sourceTree = "<group>"; }; 8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVInvokedUrlCommand.m; path = Classes/CDVInvokedUrlCommand.m; sourceTree = "<group>"; }; 8887FD501090FBE7009987E8 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "Classes/NSData+Base64.h"; sourceTree = "<group>"; }; @@@ -84,8 -126,10 +97,8 @@@ EB6A98531A77EE470013FCDB /* CDVJSON_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVJSON_private.h; path = Classes/CDVJSON_private.h; sourceTree = "<group>"; }; EB96673916A8970900D86CDF /* CDVUserAgentUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVUserAgentUtil.h; path = Classes/CDVUserAgentUtil.h; sourceTree = "<group>"; }; EB96673A16A8970900D86CDF /* CDVUserAgentUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVUserAgentUtil.m; path = Classes/CDVUserAgentUtil.m; sourceTree = "<group>"; }; - EBFF4DBA16D3FE2E008F452B /* CDVWebViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVWebViewDelegate.m; path = Classes/CDVWebViewDelegate.m; sourceTree = "<group>"; }; - EBFF4DBB16D3FE2E008F452B /* CDVWebViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVWebViewDelegate.h; path = Classes/CDVWebViewDelegate.h; sourceTree = "<group>"; }; - EBA3557115ABD38C00F4DE24 /* NSArray+Comparisons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSArray+Comparisons.h"; path = "Classes/NSArray+Comparisons.h"; sourceTree = "<group>"; }; - EBA3557215ABD38C00F4DE24 /* NSArray+Comparisons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Comparisons.m"; path = "Classes/NSArray+Comparisons.m"; sourceTree = "<group>"; }; + EBFF4DBA16D3FE2E008F452B /* CDVUIWebViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVUIWebViewDelegate.m; path = Classes/CDVUIWebViewDelegate.m; sourceTree = "<group>"; }; + EBFF4DBB16D3FE2E008F452B /* CDVUIWebViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVUIWebViewDelegate.h; path = Classes/CDVUIWebViewDelegate.h; sourceTree = "<group>"; }; F858FBC4166009A8007DA594 /* CDVConfigParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVConfigParser.h; path = Classes/CDVConfigParser.h; sourceTree = "<group>"; }; F858FBC5166009A8007DA594 /* CDVConfigParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVConfigParser.m; path = Classes/CDVConfigParser.m; sourceTree = "<group>"; }; /* End PBXFileReference section */ @@@ -130,35 -240,28 +143,41 @@@ 30E33AF113A7E24B00594D64 /* CDVPlugin.m */, 1F92F49E1314023E0046367C /* CDVPluginResult.h */, 1F92F49F1314023E0046367C /* CDVPluginResult.m */, + 8852C43614B65FD800F0E735 /* CDVViewController.h */, + 8852C43714B65FD800F0E735 /* CDVViewController.m */, + 30F5EBA914CA26E700987760 /* CDVCommandDelegate.h */, + 30C684921407044A004C1A8E /* CDVURLProtocol.h */, + 30C684931407044A004C1A8E /* CDVURLProtocol.m */, 8887FD341090FBE7009987E8 /* CDVInvokedUrlCommand.h */, 8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */, + 30C6847E1406CB38004C1A8E /* CDVWhitelist.h */, + 30C6847F1406CB38004C1A8E /* CDVWhitelist.m */, + 3034979A1513D56A0090E688 /* CDVLocalStorage.h */, + 3034979B1513D56A0090E688 /* CDVLocalStorage.m */, 3073E9EC1656D51200957977 /* CDVScreenOrientationDelegate.h */, - 30F39309169F839700B22307 /* CDVJSON.h */, - 30F3930A169F839700B22307 /* CDVJSON.m */, - EB6A98521A77EE470013FCDB /* CDVJSON_private.m */, - EB6A98531A77EE470013FCDB /* CDVJSON_private.h */, + 7E14B5A61705050A0032169E /* CDVTimer.h */, + 7E14B5A71705050A0032169E /* CDVTimer.m */, + F858FBC4166009A8007DA594 /* CDVConfigParser.h */, + F858FBC5166009A8007DA594 /* CDVConfigParser.m */, EB96673916A8970900D86CDF /* CDVUserAgentUtil.h */, EB96673A16A8970900D86CDF /* CDVUserAgentUtil.m */, - EBFF4DBA16D3FE2E008F452B /* CDVWebViewDelegate.m */, - EBFF4DBB16D3FE2E008F452B /* CDVWebViewDelegate.h */, ++ EBFF4DBA16D3FE2E008F452B /* CDVUIWebViewDelegate.m */, ++ EBFF4DBB16D3FE2E008F452B /* CDVUIWebViewDelegate.h */, + 8887FD501090FBE7009987E8 /* NSData+Base64.h */, + 8887FD511090FBE7009987E8 /* NSData+Base64.m */, ++ 306ADAE21AAA73E100CAC885 /* CDVWebViewEngineProtocol.h */, ); - name = Commands; + name = Public; sourceTree = "<group>"; }; - 888700D910923009009987E8 /* Util */ = { + 888700D910923009009987E8 /* Private */ = { isa = PBXGroup; children = ( - 3062D11E151D0EDB000D9128 /* UIDevice+Extensions.h */, - 3062D11F151D0EDB000D9128 /* UIDevice+Extensions.m */, - EBA3557115ABD38C00F4DE24 /* NSArray+Comparisons.h */, - EBA3557215ABD38C00F4DE24 /* NSArray+Comparisons.m */, - 8887FD281090FBE7009987E8 /* NSDictionary+Extensions.h */, - 8887FD291090FBE7009987E8 /* NSDictionary+Extensions.m */, ++ 306ADAE31AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h */, ++ 306ADAE11AAA73E100CAC885 /* CDVUIWebViewEngine.m */, ++ 306ADAE41AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m */, ++ 306ADADE1AAA73A800CAC885 /* CDVHandleOpenURL.m */, ++ 306ADADC1AAA739800CAC885 /* CDVHandleOpenURL.h */, 302965BB13A94E9D007046C5 /* CDVDebug.h */, 30E563CD13E217EC00C949AA /* NSMutableArray+QueueAdditions.h */, 30E563CE13E217EC00C949AA /* NSMutableArray+QueueAdditions.m */, @@@ -180,24 -292,36 +199,29 @@@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8887FD681090FBE7009987E8 /* NSDictionary+Extensions.h in Headers */, - 8887FD741090FBE7009987E8 /* CDVInvokedUrlCommand.h in Headers */, - 8887FD8F1090FBE7009987E8 /* NSData+Base64.h in Headers */, - 1F92F4A01314023E0046367C /* CDVPluginResult.h in Headers */, + 301F2F2A14F3C9CA003FE9FC /* CDV.h in Headers */, + 30392E4E14F4FCAB00B9E0B8 /* CDVAvailability.h in Headers */, + EB6A98401A729CD70013FCDB /* CDVAvailabilityDeprecated.h in Headers */, 30E33AF213A7E24B00594D64 /* CDVPlugin.h in Headers */, - 30E6B8CD1A8ADD900025B9EE /* CDVHandleOpenURL.h in Headers */, - 302965BC13A94E9D007046C5 /* CDVDebug.h in Headers */, - 30E563CF13E217EC00C949AA /* NSMutableArray+QueueAdditions.h in Headers */, - 30C684801406CB38004C1A8E /* CDVWhitelist.h in Headers */, - 30C684941407044B004C1A8E /* CDVURLProtocol.h in Headers */, + 1F92F4A01314023E0046367C /* CDVPluginResult.h in Headers */, - 30E6B8CD1A8ADD900025B9EE /* CDVHandleOpenURL.h in Headers */, ++ 306ADAE71AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h in Headers */, 8852C43A14B65FD800F0E735 /* CDVViewController.h in Headers */, 30F5EBAB14CA26E700987760 /* CDVCommandDelegate.h in Headers */, - 301F2F2A14F3C9CA003FE9FC /* CDV.h in Headers */, - 30392E4E14F4FCAB00B9E0B8 /* CDVAvailability.h in Headers */, - 7E22B88519E4C0210026F95E /* CDVAvailabilityDeprecated.h in Headers */, + 30C684941407044B004C1A8E /* CDVURLProtocol.h in Headers */, + 8887FD741090FBE7009987E8 /* CDVInvokedUrlCommand.h in Headers */, + 30C684801406CB38004C1A8E /* CDVWhitelist.h in Headers */, 3034979C1513D56A0090E688 /* CDVLocalStorage.h in Headers */, - 3062D120151D0EDB000D9128 /* UIDevice+Extensions.h in Headers */, - EBA3557315ABD38C00F4DE24 /* NSArray+Comparisons.h in Headers */, - EB3B3547161CB44D003DBE7D /* CDVCommandQueue.h in Headers */, - EB3B357C161F2A45003DBE7D /* CDVCommandDelegateImpl.h in Headers */, - 1B701028177A61CF00AE11F4 /* CDVShared.h in Headers */, ++ 306ADADD1AAA739800CAC885 /* CDVHandleOpenURL.h in Headers */, 3073E9ED1656D51200957977 /* CDVScreenOrientationDelegate.h in Headers */, + 7E14B5A81705050A0032169E /* CDVTimer.h in Headers */, F858FBC6166009A8007DA594 /* CDVConfigParser.h in Headers */, - 30F3930B169F839700B22307 /* CDVJSON.h in Headers */, - EBFF4DBD16D3FE2E008F452B /* CDVUIWebViewDelegate.h in Headers */, - 30B7A65C1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.h in Headers */, - 3083EB981A0AF23A00548672 /* CDVUIWebViewEngine.h in Headers */, - 30D552E11A0AB1F5002007BB /* CDVWebViewEngineProtocol.h in Headers */, ++ 306ADAE61AAA73E100CAC885 /* CDVWebViewEngineProtocol.h in Headers */, EB96673B16A8970A00D86CDF /* CDVUserAgentUtil.h in Headers */, - EBFF4DBD16D3FE2E008F452B /* CDVWebViewDelegate.h in Headers */, - 7E14B5A81705050A0032169E /* CDVTimer.h in Headers */, ++ 306ADAEA1AAA745400CAC885 /* CDVCommandQueue.h in Headers */, + EB6A98571A77FA430013FCDB /* NSData+Base64.h in Headers */, ++ 306ADAEB1AAA747100CAC885 /* NSMutableArray+QueueAdditions.h in Headers */, ++ 306ADAEC1AAA753300CAC885 /* CDVCommandDelegateImpl.h in Headers */, ++ EBFF4DBD16D3FE2E008F452B /* CDVUIWebViewDelegate.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@@ -255,22 -379,28 +279,25 @@@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8887FD691090FBE7009987E8 /* NSDictionary+Extensions.m in Sources */, 8887FD751090FBE7009987E8 /* CDVInvokedUrlCommand.m in Sources */, 8887FD901090FBE7009987E8 /* NSData+Base64.m in Sources */, ++ 306ADAE81AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m in Sources */, 1F92F4A11314023E0046367C /* CDVPluginResult.m in Sources */, + 30B7A65D1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.m in Sources */, 30E33AF313A7E24B00594D64 /* CDVPlugin.m in Sources */, 30E563D013E217EC00C949AA /* NSMutableArray+QueueAdditions.m in Sources */, 30C684821406CB38004C1A8E /* CDVWhitelist.m in Sources */, 30C684961407044B004C1A8E /* CDVURLProtocol.m in Sources */, 8852C43C14B65FD800F0E735 /* CDVViewController.m in Sources */, 3034979E1513D56A0090E688 /* CDVLocalStorage.m in Sources */, - 3062D122151D0EDB000D9128 /* UIDevice+Extensions.m in Sources */, - EBA3557515ABD38C00F4DE24 /* NSArray+Comparisons.m in Sources */, ++ 306ADAE51AAA73E100CAC885 /* CDVUIWebViewEngine.m in Sources */, EB3B3548161CB44D003DBE7D /* CDVCommandQueue.m in Sources */, EB6A98541A77EE470013FCDB /* CDVJSON_private.m in Sources */, EB3B357D161F2A45003DBE7D /* CDVCommandDelegateImpl.m in Sources */, F858FBC7166009A8007DA594 /* CDVConfigParser.m in Sources */, - 30F3930C169F839700B22307 /* CDVJSON.m in Sources */, - 3083EB991A0AF23A00548672 /* CDVUIWebViewEngine.m in Sources */, EB96673C16A8970A00D86CDF /* CDVUserAgentUtil.m in Sources */, -- 30E6B8CE1A8ADD900025B9EE /* CDVHandleOpenURL.m in Sources */, - EBFF4DBC16D3FE2E008F452B /* CDVWebViewDelegate.m in Sources */, ++ 306ADAE01AAA73BA00CAC885 /* CDVHandleOpenURL.m in Sources */, + EBFF4DBC16D3FE2E008F452B /* CDVUIWebViewDelegate.m in Sources */, 7E14B5A91705050A0032169E /* CDVTimer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org For additional commands, e-mail: commits-h...@cordova.apache.org