You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by je...@apache.org on 2013/09/27 16:26:13 UTC
[09/50] [abbrv] webworks commit: [CB-4076] Added support for the
origin attribute in config.xml
[CB-4076] Added support for the origin attribute in config.xml
Reviewed by Jeffrey Heifetz <jh...@blackberry.com>
Tested by Tracy Li <tl...@blackberry.com>
Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/19267e2e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/19267e2e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/19267e2e
Branch: refs/heads/3.1.x
Commit: 19267e2ea12be1265d2268cc29a6e9e9bc1165f4
Parents: 3a53fb7
Author: Kristoffer Flores <kf...@blackberry.com>
Authored: Thu Jul 11 11:19:48 2013 -0400
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Tue Aug 6 11:09:35 2013 -0400
----------------------------------------------------------------------
.../project/cordova/lib/config-parser.js | 36 ++++++++++---
.../templates/project/cordova/lib/localize.js | 5 +-
blackberry10/bin/test/cordova/unit/config.xml | 2 +-
.../bin/test/cordova/unit/configUri.xml | 53 ++++++++++++++++++
.../bin/test/cordova/unit/configUriOrigin.xml | 57 ++++++++++++++++++++
.../test/cordova/unit/spec/lib/config-parser.js | 45 ++++++++++++----
.../cordova/unit/spec/lib/test-utilities.js | 30 ++++++-----
7 files changed, 195 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/templates/project/cordova/lib/config-parser.js
----------------------------------------------------------------------
diff --git a/blackberry10/bin/templates/project/cordova/lib/config-parser.js b/blackberry10/bin/templates/project/cordova/lib/config-parser.js
index 0e3d9e9..0cb06e5 100644
--- a/blackberry10/bin/templates/project/cordova/lib/config-parser.js
+++ b/blackberry10/bin/templates/project/cordova/lib/config-parser.js
@@ -97,9 +97,9 @@ function processFeatures(featuresArray, widgetConfig, processPredefinedFeatures)
return features;
}
-function createAccessListObj(uri, allowSubDomain) {
+function createAccessListObj(uriOrOrigin, allowSubDomain) {
return {
- uri: uri,
+ uri: uriOrOrigin,
allowSubDomain: allowSubDomain
};
}
@@ -124,7 +124,11 @@ function processBuildID(widgetConfig, session) {
}
function processWidgetData(data, widgetConfig, session) {
- var attribs, featureArray, header;
+ var attribs,
+ featureArray,
+ uriExist,
+ originExist,
+ header;
if (data["@"]) {
widgetConfig.version = data["@"].version;
@@ -169,19 +173,37 @@ function processWidgetData(data, widgetConfig, session) {
data.access = [data.access];
}
+ //check if uri and origin attributes are used
+ data.access.forEach(function (accessElement, accessIndex) {
+ attribs = accessElement["@"];
+
+ if (attribs) {
+ if (attribs.uri) {
+ uriExist = true;
+ }
+ if (attribs.origin) {
+ originExist = true;
+ }
+ }
+ });
+ if (uriExist === true && originExist === true) {
+ logger.warn(localize.translate("WARNING_URI_AND_ORIGIN_FOUND_IN_CONFIG"));
+ }
+
data.access.forEach(function (accessElement) {
attribs = accessElement["@"];
if (attribs) {
- if (attribs.uri === "*") {
+ if (attribs.uri === "*" || attribs.origin === "*") {
if (accessElement.feature) {
- throw localize.translate("EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI");
+ throw localize.translate("EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI_OR_ORIGIN");
}
-
widgetConfig.hasMultiAccess = true;
} else {
attribs.subdomains = packagerUtils.toBoolean(attribs.subdomains);
- widgetConfig.accessList.push(createAccessListObj(attribs.uri, attribs.subdomains));
+ if (attribs.uri || attribs.origin) {
+ widgetConfig.accessList.push(createAccessListObj(attribs.uri || attribs.origin, attribs.subdomains));
+ }
}
}
});
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/templates/project/cordova/lib/localize.js
----------------------------------------------------------------------
diff --git a/blackberry10/bin/templates/project/cordova/lib/localize.js b/blackberry10/bin/templates/project/cordova/lib/localize.js
index 57316c2..d51629a 100755
--- a/blackberry10/bin/templates/project/cordova/lib/localize.js
+++ b/blackberry10/bin/templates/project/cordova/lib/localize.js
@@ -82,12 +82,15 @@ var Localize = require("localize"),
"EXCEPTION_BUFFER_ERROR": {
"en": "ERROR in bufferToString(): Buffer length must be even"
},
- "EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI": {
+ "EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI_OR_ORIGIN": {
"en": "Invalid config.xml - no <feature> tags are allowed for this <access> element"
},
"EXCEPTION_INVALID_ACCESS_URI_NO_PROTOCOL": {
"en": "Invalid URI attribute in the access element - protocol required($[1])"
},
+ "WARNING_URI_AND_ORIGIN_FOUND_IN_CONFIG": {
+ "en": "Invalid config.xml - <access> tags should have one of 'uri' or 'origin' attributes. 'origin' attribute will be ignored"
+ },
"EXCEPTION_INVALID_ACCESS_URI_NO_URN": {
"en": "Failed to parse the URI attribute in the access element($[1])"
},
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/test/cordova/unit/config.xml
----------------------------------------------------------------------
diff --git a/blackberry10/bin/test/cordova/unit/config.xml b/blackberry10/bin/test/cordova/unit/config.xml
index 8650a90..9f42675 100644
--- a/blackberry10/bin/test/cordova/unit/config.xml
+++ b/blackberry10/bin/test/cordova/unit/config.xml
@@ -28,7 +28,7 @@
<param name="popupBlocker" value="enable" />
</feature>
<feature id="blackberry.system" required="true" version="1.0.0.3"/>
- <access uri="http://www.somedomain1.com" subdomains="true">
+ <access origin="http://www.somedomain1.com" subdomains="true">
<feature id="blackberry.app" required="true" version="1.0.0.0"/>
<feature id="blackberry.app.event" required="false" version="2.0.0.0"/>
</access>
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/test/cordova/unit/configUri.xml
----------------------------------------------------------------------
diff --git a/blackberry10/bin/test/cordova/unit/configUri.xml b/blackberry10/bin/test/cordova/unit/configUri.xml
new file mode 100644
index 0000000..8650a90
--- /dev/null
+++ b/blackberry10/bin/test/cordova/unit/configUri.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<widget xmlns=" http://www.w3.org/ns/widgets"
+ xmlns:rim="http://www.blackberry.com/ns/widgets"
+ version="1.0.0"
+ id="My WidgetId"
+ rim:header="RIM-Widget:rim/widget"
+ rim:userAgent="A Test-User-Agent/(Blackberry-Agent)">
+ <name>Demo</name>
+ <content src="local:///startPage.html"/>
+ <author rim:copyright="No Copyright"
+ href="http://www.rim.com/"
+ email = "author@rim.com">Research In Motion Ltd.</author>
+ <description>This app does everything.</description>
+ <license href="http://www.apache.org/licenses/LICENSE-2.0">My License</license>
+ <icon src="test.png" />
+ <rim:permissions>
+ <rim:permit>access_shared</rim:permit>
+ <rim:permit>read_geolocation</rim:permit>
+ <rim:permit>use_camera</rim:permit>
+ </rim:permissions>
+ <feature id="blackberry.app.orientation">
+ <param name="mode" value="portrait" />
+ <param name="other" value="portrait" />
+ </feature>
+ <feature id="blackberry.app" required="true" version="1.0.0.0">
+ <param name="childBrowser" value="disable" />
+ <param name="websecurity" value="disable" />
+ <param name="popupBlocker" value="enable" />
+ </feature>
+ <feature id="blackberry.system" required="true" version="1.0.0.3"/>
+ <access uri="http://www.somedomain1.com" subdomains="true">
+ <feature id="blackberry.app" required="true" version="1.0.0.0"/>
+ <feature id="blackberry.app.event" required="false" version="2.0.0.0"/>
+ </access>
+ <rim:invoke-target id="com.domain.subdomain.appname.app1">
+ <type>APPLICATION</type>
+ <require-source-permissions>invoke_accross_perimeters,access_shared</require-source-permissions>
+ <filter>
+ <action>bb.action.OPEN</action>
+ <action>bb.action.SET</action>
+ <action>bb.action.VIEW</action>
+ <mime-type>image/*</mime-type>
+ <mime-type>text/*</mime-type>
+ <property var="uris" value="ftp://" />
+ <property var="uris" value="http://" />
+ <property var="uris" value="https://" />
+ <property var="exts" value="jpg" />
+ <property var="exts" value="png" />
+ <property var="exts" value="txt" />
+ <property var="exts" value="doc" />
+ </filter>
+ </rim:invoke-target>
+</widget>
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/test/cordova/unit/configUriOrigin.xml
----------------------------------------------------------------------
diff --git a/blackberry10/bin/test/cordova/unit/configUriOrigin.xml b/blackberry10/bin/test/cordova/unit/configUriOrigin.xml
new file mode 100644
index 0000000..5267c40
--- /dev/null
+++ b/blackberry10/bin/test/cordova/unit/configUriOrigin.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<widget xmlns=" http://www.w3.org/ns/widgets"
+ xmlns:rim="http://www.blackberry.com/ns/widgets"
+ version="1.0.0"
+ id="My WidgetId"
+ rim:header="RIM-Widget:rim/widget"
+ rim:userAgent="A Test-User-Agent/(Blackberry-Agent)">
+ <name>Demo</name>
+ <content src="local:///startPage.html"/>
+ <author rim:copyright="No Copyright"
+ href="http://www.rim.com/"
+ email = "author@rim.com">Research In Motion Ltd.</author>
+ <description>This app does everything.</description>
+ <license href="http://www.apache.org/licenses/LICENSE-2.0">My License</license>
+ <icon src="test.png" />
+ <rim:permissions>
+ <rim:permit>access_shared</rim:permit>
+ <rim:permit>read_geolocation</rim:permit>
+ <rim:permit>use_camera</rim:permit>
+ </rim:permissions>
+ <feature id="blackberry.app.orientation">
+ <param name="mode" value="portrait" />
+ <param name="other" value="portrait" />
+ </feature>
+ <feature id="blackberry.app" required="true" version="1.0.0.0">
+ <param name="childBrowser" value="disable" />
+ <param name="websecurity" value="disable" />
+ <param name="popupBlocker" value="enable" />
+ </feature>
+ <feature id="blackberry.system" required="true" version="1.0.0.3"/>
+ <access uri="http://www.somedomain1.com" subdomains="true">
+ <feature id="blackberry.app" required="true" version="1.0.0.0"/>
+ <feature id="blackberry.app.event" required="false" version="2.0.0.0"/>
+ </access>
+ <access origin="http://www.somedomain1.com" subdomains="true">
+ <feature id="blackberry.app" required="true" version="1.0.0.0"/>
+ <feature id="blackberry.app.event" required="false" version="2.0.0.0"/>
+ </access>
+ <rim:invoke-target id="com.domain.subdomain.appname.app1">
+ <type>APPLICATION</type>
+ <require-source-permissions>invoke_accross_perimeters,access_shared</require-source-permissions>
+ <filter>
+ <action>bb.action.OPEN</action>
+ <action>bb.action.SET</action>
+ <action>bb.action.VIEW</action>
+ <mime-type>image/*</mime-type>
+ <mime-type>text/*</mime-type>
+ <property var="uris" value="ftp://" />
+ <property var="uris" value="http://" />
+ <property var="uris" value="https://" />
+ <property var="exts" value="jpg" />
+ <property var="exts" value="png" />
+ <property var="exts" value="txt" />
+ <property var="exts" value="doc" />
+ </filter>
+ </rim:invoke-target>
+</widget>
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/test/cordova/unit/spec/lib/config-parser.js
----------------------------------------------------------------------
diff --git a/blackberry10/bin/test/cordova/unit/spec/lib/config-parser.js b/blackberry10/bin/test/cordova/unit/spec/lib/config-parser.js
index 41775f4..32cacf0 100644
--- a/blackberry10/bin/test/cordova/unit/spec/lib/config-parser.js
+++ b/blackberry10/bin/test/cordova/unit/spec/lib/config-parser.js
@@ -12,6 +12,8 @@ var testData = require("./test-data"),
fs = require("fs"),
session = testData.session,
configPath = path.resolve("bin/test/cordova/unit/config.xml"),
+ configPathUri = path.resolve("bin/test/cordova/unit/configUri.xml"),
+ configPathUriOrigin = path.resolve("bin/test/cordova/unit/configUriOrigin.xml"),
configBadPath = path.resolve("test2/config.xml"),
configBareMinimumPath = path.resolve("bin/test/cordova/unit/config-bare-minimum.xml"),
mockParsing = testUtilities.mockParsing;
@@ -56,12 +58,11 @@ describe("config parser", function () {
var localAccessList,
accessListFeature;
- configParser.parse(configPath, session, function (configObj) {
+ configParser.parse(configPathUri, session, function (configObj) {
//validate WIDGET_LOCAL accessList
- localAccessList = testUtilities.getAccessListForUri(configObj.accessList, "WIDGET_LOCAL");
+ localAccessList = testUtilities.getAccessList(configObj.accessList, "WIDGET_LOCAL");
expect(localAccessList).toBeDefined();
expect(localAccessList.uri).toEqual("WIDGET_LOCAL");
- expect(localAccessList.allowSubDomain).toEqual(true);
});
});
@@ -69,9 +70,9 @@ describe("config parser", function () {
var customAccessList,
accessListFeature;
- configParser.parse(configPath, session, function (configObj) {
+ configParser.parse(configPathUri, session, function (configObj) {
//validate http://www.somedomain1.com accessList
- customAccessList = testUtilities.getAccessListForUri(configObj.accessList, "http://www.somedomain1.com");
+ customAccessList = testUtilities.getAccessList(configObj.accessList, "http://www.somedomain1.com");
expect(customAccessList).toBeDefined();
expect(customAccessList.uri).toEqual("http://www.somedomain1.com");
expect(customAccessList.allowSubDomain).toEqual(true);
@@ -101,7 +102,6 @@ describe("config parser", function () {
data["@"].id = undefined;
mockParsing(data);
-
//Should throw an EXCEPTION_INVALID_ID error
expect(function () {
configParser.parse(configPath, session, {});
@@ -134,7 +134,7 @@ describe("config parser", function () {
it("Fails when no name was provided - multiple elements", function () {
var data = testUtilities.cloneObj(testData.xml2jsConfig);
data.name = ["",
- { '#': 'API Smoke Test-FR', '@': { 'xml:lang': 'fr' } },
+ { '#': 'API Smoke Test-FR', '@': { 'xml:lang': 'fr' } }
];
mockParsing(data);
@@ -147,7 +147,7 @@ describe("config parser", function () {
it("Fails when localized name was provided but empty", function () {
var data = testUtilities.cloneObj(testData.xml2jsConfig);
data.name = ["API Smoke Test",
- { '#': '', '@': { 'xml:lang': 'fr' } },
+ { '#': '', '@': { 'xml:lang': 'fr' } }
];
mockParsing(data);
@@ -207,7 +207,7 @@ describe("config parser", function () {
it("Fails when localized name was provided but empty", function () {
var data = testUtilities.cloneObj(testData.xml2jsConfig);
data.name = ['API Smoke Test',
- { '#': '', '@': { 'xml:lang': 'fr' } },
+ { '#': '', '@': { 'xml:lang': 'fr' } }
];
mockParsing(data);
@@ -454,6 +454,11 @@ describe("config parser", function () {
}).not.toThrow();
});
+ it("throws a warning when both uri and origin attributes exist", function () {
+ configParser.parse(configPathUriOrigin, session, function (configObj) {});
+ expect(logger.warn).toHaveBeenCalled();
+ });
+
it("multi access should be false if no access", function () {
var data = testUtilities.cloneObj(testData.xml2jsConfig);
@@ -487,6 +492,24 @@ describe("config parser", function () {
});
});
+ it("multi access should be false if no origin is equal to *", function () {
+ var data = testUtilities.cloneObj(testData.xml2jsConfig);
+ data['access'] = {"@" : {"origin" : "http://www.somedomain1.com"}};
+
+ mockParsing(data);
+
+ configParser.parse(configPath, session, function (configObj) {
+ //hasMultiAccess was set to false
+ expect(configObj.hasMultiAccess).toEqual(false);
+ expect(configObj.accessList).toEqual([ {
+ origin : 'WIDGET_LOCAL',
+ allowSubDomain : true
+ }, {
+ "origin" : "http://www.somedomain1.com"
+ } ]);
+ });
+ });
+
it("multi access should be true with the uri being equal to *", function () {
var data = testUtilities.cloneObj(testData.xml2jsConfig);
data['access'] = {"@" : {"uri" : "*"}};
@@ -529,7 +552,7 @@ describe("config parser", function () {
expect(function () {
configParser.parse(configPath, session, function (configObj) {});
- }).toThrow(localize.translate("EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI"));
+ }).toThrow(localize.translate("EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI_OR_ORIGIN"));
});
it("should fail when multi features are defined with the uri being equal to *", function () {
@@ -540,7 +563,7 @@ describe("config parser", function () {
expect(function () {
configParser.parse(configPath, session, function (configObj) {});
- }).toThrow(localize.translate("EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI"));
+ }).toThrow(localize.translate("EXCEPTION_FEATURE_DEFINED_WITH_WILDCARD_ACCESS_URI_OR_ORIGIN"));
});
it("should fail when the access uri attribute does not specify a protocol", function () {
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/19267e2e/blackberry10/bin/test/cordova/unit/spec/lib/test-utilities.js
----------------------------------------------------------------------
diff --git a/blackberry10/bin/test/cordova/unit/spec/lib/test-utilities.js b/blackberry10/bin/test/cordova/unit/spec/lib/test-utilities.js
index 6f0dbf9..80867a7 100644
--- a/blackberry10/bin/test/cordova/unit/spec/lib/test-utilities.js
+++ b/blackberry10/bin/test/cordova/unit/spec/lib/test-utilities.js
@@ -9,16 +9,20 @@ function getObjectByProperty(array, propertyName, propertyValue) {
}
module.exports = {
- getAccessListForUri: function (accessListArray, uriValue) {
- return getObjectByProperty(accessListArray, "uri", uriValue);
+ getAccessList: function (accessListArray, value) {
+ if (accessListArray[0].hasOwnProperty("uri") === true) {
+ return getObjectByProperty(accessListArray, "uri", value);
+ } else {
+ return getObjectByProperty(accessListArray, "origin", value);
+ }
},
-
+
getFeatureByID: function (featureArray, featureID) {
return getObjectByProperty(featureArray, "id", featureID);
},
-
+
mockResolve: function (path) {
- //Mock resolve because of a weird issue where resolve would return an
+ //Mock resolve because of a weird issue where resolve would return an
//invalid path on Mac if it cannot find the directory (c:/ doesnt exist on mac)
spyOn(path, "resolve").andCallFake(function (to) {
if (arguments.length === 2) {
@@ -29,20 +33,20 @@ module.exports = {
}
});
},
-
+
cloneObj: function (obj) {
var newObj = (obj instanceof Array) ? [] : {}, i;
-
+
for (i in obj) {
if (i === 'clone') continue;
-
+
if (obj[i] && typeof obj[i] === "object") {
newObj[i] = this.cloneObj(obj[i]);
} else {
newObj[i] = obj[i];
}
}
-
+
return newObj;
},
@@ -58,12 +62,12 @@ module.exports = {
describe("test-utilities", function () {
var testUtilities = require("./test-utilities");
-
+
it("can clone objects using cloneObj", function () {
var obj = {
A: "A",
B: "B",
- C: {
+ C: {
CA: "CA",
CB: "CB",
CC: {
@@ -72,10 +76,10 @@ describe("test-utilities", function () {
}
},
clonedObj = testUtilities.cloneObj(obj);
-
+
//not the same object
expect(clonedObj).not.toBe(obj);
-
+
//has the same data
expect(clonedObj).toEqual(obj);
});