CB-9337 - enable use of <access> tags for native code network requests
diff --git a/plugin.xml b/plugin.xml
index 29f87e0..a6aec21 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -49,12 +49,12 @@
     <platform name="ios">
         <config-file target="config.xml" parent="/*">
             <feature name="Whitelist">
-                <param name="ios-package" value="CDVNavigationWhitelistPlugin" /> 
+                <param name="ios-package" value="CDVWhitelistPlugin" /> 
                 <param name="onload" value="true" />
             </feature>
         </config-file>
-        <header-file src="src/ios/CDVNavigationWhitelistPlugin.h"  />
-        <source-file src="src/ios/CDVNavigationWhitelistPlugin.m" />
+        <header-file src="src/ios/CDVWhitelistPlugin.h"  />
+        <source-file src="src/ios/CDVWhitelistPlugin.m" />
 
         <js-module src="whitelist.js" name="whitelist">
             <runs />
diff --git a/src/ios/CDVNavigationWhitelistPlugin.m b/src/ios/CDVNavigationWhitelistPlugin.m
deleted file mode 100644
index 11525f2..0000000
--- a/src/ios/CDVNavigationWhitelistPlugin.m
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- 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 "CDVNavigationWhitelistPlugin.h"
-#import <Cordova/CDVViewController.h>
-
-#pragma mark CDVNavigationWhitelistConfigParser
-
-@interface CDVNavigationWhitelistConfigParser : NSObject <NSXMLParserDelegate> {}
-
-@property (nonatomic, strong) NSMutableArray* whitelistHosts;
-
-@end
-
-@implementation CDVNavigationWhitelistConfigParser
-
-@synthesize whitelistHosts;
-
-- (id)init
-{
-    self = [super init];
-    if (self != nil) {
-        self.whitelistHosts = [[NSMutableArray alloc] initWithCapacity:30];
-        [self.whitelistHosts addObject:@"file:///*"];
-        [self.whitelistHosts addObject:@"content:///*"];
-        [self.whitelistHosts addObject:@"data:///*"];
-    }
-    return self;
-}
-
-- (void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*)attributeDict
-{
-    if ([elementName isEqualToString:@"allow-navigation"]) {
-        [whitelistHosts addObject:attributeDict[@"href"]];
-    }
-}
-
-- (void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName
-{
-}
-
-- (void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError
-{
-    NSAssert(NO, @"config.xml parse error line %ld col %ld", (long)[parser lineNumber], (long)[parser columnNumber]);
-}
-
-
-@end
-
-#pragma mark CDVNavigationWhitelistPlugin
-
-@interface CDVNavigationWhitelistPlugin () {}
-@property (nonatomic, strong) CDVWhitelist* whitelist;
-@end
-
-@implementation CDVNavigationWhitelistPlugin
-
-@synthesize whitelist;
-
-- (void)setViewController:(UIViewController *)viewController
-{
-    if ([viewController isKindOfClass:[CDVViewController class]]) {
-        CDVNavigationWhitelistConfigParser *whitelistConfigParser = [[CDVNavigationWhitelistConfigParser alloc] init];
-        [(CDVViewController *)viewController parseSettingsWithParser:whitelistConfigParser];
-        self.whitelist = [[CDVWhitelist alloc] initWithArray:whitelistConfigParser.whitelistHosts];
-    }
-}
-
-- (BOOL)shouldAllowNavigationToURL:(NSURL *)url
-{
-    return [self.whitelist URLIsAllowed:url];
-}
-@end
diff --git a/src/ios/CDVNavigationWhitelistPlugin.h b/src/ios/CDVWhitelistPlugin.h
similarity index 77%
rename from src/ios/CDVNavigationWhitelistPlugin.h
rename to src/ios/CDVWhitelistPlugin.h
index c1c1301..b91409c 100644
--- a/src/ios/CDVNavigationWhitelistPlugin.h
+++ b/src/ios/CDVWhitelistPlugin.h
@@ -22,8 +22,9 @@
 #import <Cordova/CDVWhitelist.h>
 #import <Cordova/CDVURLRequestFilter.h>
 
-@interface CDVNavigationWhitelistPlugin : CDVPlugin <CDVURLRequestFilter>{}
+@interface CDVWhitelistPlugin : CDVPlugin <CDVURLRequestFilter>{}
 
-@property (nonatomic, readonly, strong) CDVWhitelist* whitelist; // readonly for public
+@property (nonatomic, readonly, strong) CDVWhitelist* navigationWhitelist; // readonly for public
+@property (nonatomic, readonly, strong) CDVWhitelist* accessWhitelist; // readonly for public
 
 @end
diff --git a/src/ios/CDVWhitelistPlugin.m b/src/ios/CDVWhitelistPlugin.m
new file mode 100644
index 0000000..7785879
--- /dev/null
+++ b/src/ios/CDVWhitelistPlugin.m
@@ -0,0 +1,105 @@
+/*
+ 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 "CDVWhitelistPlugin.h"
+#import <Cordova/CDVViewController.h>
+
+#pragma mark CDVWhitelistConfigParser
+
+@interface CDVWhitelistConfigParser : NSObject <NSXMLParserDelegate> {}
+
+@property (nonatomic, strong) NSMutableArray* navigationWhitelistHosts;
+@property (nonatomic, strong) NSMutableArray* accessWhitelistHosts;
+
+@end
+
+@implementation CDVWhitelistConfigParser
+
+@synthesize navigationWhitelistHosts, accessWhitelistHosts;
+
+- (id)init
+{
+    self = [super init];
+    if (self != nil) {
+        NSArray* defaultHosts = @[
+                                  @"file:///*",
+                                  @"content:///*",
+                                  @"data:///*"
+                                  ];
+
+        self.navigationWhitelistHosts = [[NSMutableArray alloc] initWithArray:defaultHosts];
+        self.accessWhitelistHosts = [[NSMutableArray alloc] initWithArray:defaultHosts];
+    }
+    return self;
+}
+
+- (void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*)attributeDict
+{
+    if ([elementName isEqualToString:@"allow-navigation"]) {
+        [navigationWhitelistHosts addObject:attributeDict[@"href"]];
+    }
+    else if ([elementName isEqualToString:@"access"]) {
+        [accessWhitelistHosts addObject:attributeDict[@"origin"]];
+    }
+}
+
+- (void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName
+{
+}
+
+- (void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError
+{
+    NSAssert(NO, @"config.xml parse error line %ld col %ld", (long)[parser lineNumber], (long)[parser columnNumber]);
+}
+
+
+@end
+
+#pragma mark CDVWhitelistPlugin
+
+@interface CDVWhitelistPlugin () {}
+@property (nonatomic, strong) CDVWhitelist* navigationWhitelist;
+@property (nonatomic, strong) CDVWhitelist* accessWhitelist;
+@end
+
+@implementation CDVWhitelistPlugin
+
+@synthesize navigationWhitelist, accessWhitelist;
+
+- (void)setViewController:(UIViewController *)viewController
+{
+    if ([viewController isKindOfClass:[CDVViewController class]]) {
+        CDVWhitelistConfigParser *whitelistConfigParser = [[CDVWhitelistConfigParser alloc] init];
+        [(CDVViewController *)viewController parseSettingsWithParser:whitelistConfigParser];
+        self.navigationWhitelist = [[CDVWhitelist alloc] initWithArray:whitelistConfigParser.navigationWhitelistHosts];
+        self.accessWhitelist = [[CDVWhitelist alloc] initWithArray:whitelistConfigParser.accessWhitelistHosts];
+    }
+}
+
+- (BOOL)shouldAllowNavigationToURL:(NSURL *)url
+{
+    return [self.navigationWhitelist URLIsAllowed:url];
+}
+
+- (BOOL)shouldAllowRequestForURL:(NSURL *)url
+{
+    return [self.accessWhitelist URLIsAllowed:url];
+}
+
+@end