You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2012/11/28 19:16:23 UTC

[15/50] git commit: android projects now adhere to whitelist specified by config.xml

android projects now adhere to whitelist specified by config.xml


Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/9e7b7779
Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/9e7b7779
Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/9e7b7779

Branch: refs/heads/master
Commit: 9e7b7779e60a6a4b2c73a8721c44b34fe46996f5
Parents: f58c26e
Author: Fil Maj <ma...@gmail.com>
Authored: Tue Nov 6 12:44:15 2012 -0800
Committer: Fil Maj <ma...@gmail.com>
Committed: Tue Nov 6 12:44:15 2012 -0800

----------------------------------------------------------------------
 spec/metadata/android_parser.spec.js |   15 +++++++++++++++
 src/metadata/android_parser.js       |   15 +++++++++++++++
 2 files changed, 30 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/9e7b7779/spec/metadata/android_parser.spec.js
----------------------------------------------------------------------
diff --git a/spec/metadata/android_parser.spec.js b/spec/metadata/android_parser.spec.js
index 18adccc..6371e6b 100644
--- a/spec/metadata/android_parser.spec.js
+++ b/spec/metadata/android_parser.spec.js
@@ -8,6 +8,7 @@ var android_parser = require('../../src/metadata/android_parser'),
     android_path = path.join(__dirname, '..', 'fixtures', 'projects', 'native', 'android'),
     android_strings = path.join(android_path, 'res', 'values', 'strings.xml'),
     android_manifest = path.join(android_path, 'AndroidManifest.xml'),
+    android_config = path.join(android_path, 'res', 'xml', 'config.xml'),
     tempDir = path.join(__dirname, '..', '..', 'temp'),
     cordova = require('../../cordova');
 
@@ -16,6 +17,7 @@ var cwd = process.cwd();
 var original_strings = fs.readFileSync(android_strings, 'utf-8');
 var original_manifest = fs.readFileSync(android_manifest, 'utf-8');
 var original_config = fs.readFileSync(cfg_path, 'utf-8');
+var original_android_config = fs.readFileSync(android_config, 'utf-8');
 
 describe('android project parser', function() {
     it('should throw an exception with a path that is not a native android project', function() {
@@ -42,6 +44,7 @@ describe('android project parser', function() {
             fs.writeFileSync(android_strings, original_strings, 'utf-8');
             fs.writeFileSync(android_manifest, original_manifest, 'utf-8');
             fs.writeFileSync(cfg_path, original_config, 'utf-8');
+            fs.writeFileSync(android_config, original_android_config, 'utf-8');
         });
         it('should throw an exception if a non config_parser object is passed into it', function() {
             expect(function() {
@@ -74,6 +77,18 @@ describe('android project parser', function() {
             expect(fs.existsSync(javs)).toBe(true);
             expect(fs.readFileSync(javs, 'utf-8')).toMatch(/package ca.filmaj.dewd/i);
         });
+        it('should update the whitelist properly', function() {
+            config.access.remove('*');
+            config.access.add('http://apache.org');
+            config.access.add('http://github.com');
+            project.update_from_config(config);
+
+            var native_config = new et.ElementTree(et.XML(fs.readFileSync(android_config, 'utf-8')));
+            var as = native_config.findall('access');
+            expect(as.length).toEqual(2);
+            expect(as[0].attrib.origin).toEqual('http://apache.org');
+            expect(as[1].attrib.origin).toEqual('http://github.com');
+        });
     });
 
     describe('update_www method', function() {

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/9e7b7779/src/metadata/android_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/android_parser.js b/src/metadata/android_parser.js
index ffa06ea..f49cc8d 100644
--- a/src/metadata/android_parser.js
+++ b/src/metadata/android_parser.js
@@ -12,6 +12,7 @@ module.exports = function android_parser(project) {
     this.path = project;
     this.strings = path.join(this.path, 'res', 'values', 'strings.xml');
     this.manifest = path.join(this.path, 'AndroidManifest.xml');
+    this.android_config = path.join(this.path, 'res', 'xml', 'config.xml');
 };
 
 module.exports.prototype = {
@@ -19,11 +20,13 @@ module.exports.prototype = {
         if (config instanceof config_parser) {
         } else throw 'update_from_config requires a config_parser object';
 
+        // Update app name by editing res/values/strings.xml
         var name = config.name();
         var strings = new et.ElementTree(et.XML(fs.readFileSync(this.strings, 'utf-8')));
         strings.find('string[@name="app_name"]').text = name;
         fs.writeFileSync(this.strings, strings.write({indent: 4}), 'utf-8');
 
+        // Update package name by changing the AndroidManifest id and moving the entry class around to the proper package directory
         var manifest = new et.ElementTree(et.XML(fs.readFileSync(this.manifest, 'utf-8')));
         var pkg = config.packageName();
         var orig_pkg = manifest.getroot().attrib.package;
@@ -38,7 +41,19 @@ module.exports.prototype = {
         var javs_contents = fs.readFileSync(orig_javs, 'utf-8');
         javs_contents = javs_contents.replace(/package [\w\.]*;/, 'package ' + pkg + ';');
         fs.writeFileSync(new_javs, javs_contents, 'utf-8');
+
+        // Update whitelist by changing res/xml/config.xml
+        var android_cfg_xml = new config_parser(this.android_config);
+        // clean out all existing access elements first
+        android_cfg_xml.access.get().forEach(function(uri) {
+            android_cfg_xml.access.remove(uri);
+        });
+        // add only the ones specified in the www/config.xml file
+        config.access.get().forEach(function(uri) {
+            android_cfg_xml.access.add(uri);
+        });
     },
+
     update_www:function() {
         var projectRoot = util.isCordova(process.cwd());
         var www = path.join(projectRoot, 'www');