diff options
author | torinmr@chromium.org <torinmr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-26 22:53:13 +0000 |
---|---|---|
committer | torinmr@chromium.org <torinmr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-26 22:53:13 +0000 |
commit | 0e33a9e516ac2e7a815091d6eddabc877271e3e6 (patch) | |
tree | 700f3af252234bfb00760cc0714a4144ce8cde5d | |
parent | 35099ad194d5aea9731a689787ce6cad2662fa2e (diff) | |
download | chromium_src-0e33a9e516ac2e7a815091d6eddabc877271e3e6.zip chromium_src-0e33a9e516ac2e7a815091d6eddabc877271e3e6.tar.gz chromium_src-0e33a9e516ac2e7a815091d6eddabc877271e3e6.tar.bz2 |
Updated the example build system to enable complex socket permissions.
The PERMISSIONS field in example.dsc contains a list of permissions strings, as before. The new SOCKET_PERMISSIONS field contains a list of strings for the socket sub-permissions.
BUG=None
TEST=None
R=binji@chromium.org,bradnelson@google.com
Review URL: https://chromiumcodereview.appspot.com/19601010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213994 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 27 insertions, 12 deletions
diff --git a/native_client_sdk/src/build_tools/build_app.py b/native_client_sdk/src/build_tools/build_app.py index f370b9e..5ed0fb6 100755 --- a/native_client_sdk/src/build_tools/build_app.py +++ b/native_client_sdk/src/build_tools/build_app.py @@ -3,6 +3,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import json import optparse import os import re @@ -99,22 +100,32 @@ def main(args): filters['DEST'] = ['examples/api', 'examples/getting_started', 'examples/demo', 'examples/tutorial'] tree = parse_dsc.LoadProjectTree(SDK_SRC_DIR, include=filters) - build_projects.UpdateHelpers(app_dir, platform, clobber=True) - build_projects.UpdateProjects(app_dir, platform, tree, clobber=False, + build_projects.UpdateHelpers(app_dir, clobber=True) + build_projects.UpdateProjects(app_dir, tree, clobber=False, toolchains=toolchains, configs=[config], first_toolchain=True) # Collect permissions from each example, and aggregate them. + def MergeLists(list1, list2): + return list1 + [x for x in list2 if x not in list1] all_permissions = [] + all_socket_permissions = [] for _, project in parse_dsc.GenerateProjects(tree): - all_permissions.extend(project.get('PERMISSIONS', [])) + permissions = project.get('PERMISSIONS', []) + all_permissions = MergeLists(all_permissions, permissions) + socket_permissions = project.get('SOCKET_PERMISSIONS', []) + all_socket_permissions = MergeLists(all_socket_permissions, + socket_permissions) + if all_socket_permissions: + all_permissions.append({'socket': all_socket_permissions}) + pretty_permissions = json.dumps(all_permissions, sort_keys=True, indent=4) template_dict = { 'name': 'Native Client SDK', 'description': 'Native Client SDK examples, showing API use and key concepts.', 'key': False, # manifests with "key" are rejected when uploading to CWS. - 'permissions': all_permissions, + 'permissions': pretty_permissions, 'version': build_version.ChromeVersionNoTrunk() } easy_template.RunTemplateFile( @@ -127,7 +138,7 @@ def main(args): os.environ['NACL_SDK_ROOT'] = pepperdir - build_projects.BuildProjects(app_dir, platform, tree, deps=True, clean=False, + build_projects.BuildProjects(app_dir, tree, deps=True, clean=False, config=config) RemoveBuildCruft(app_dir) diff --git a/native_client_sdk/src/build_tools/generate_make.py b/native_client_sdk/src/build_tools/generate_make.py index e74891b..db12444 100644 --- a/native_client_sdk/src/build_tools/generate_make.py +++ b/native_client_sdk/src/build_tools/generate_make.py @@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import json import os import sys @@ -138,11 +139,18 @@ def GenerateManifest(srcroot, dstroot, desc): outdir = os.path.join(dstroot, desc['DEST'], desc['NAME']) srcpath = os.path.join(SDK_EXAMPLE_DIR, 'resources', 'manifest.json.template') dstpath = os.path.join(outdir, 'manifest.json') + permissions = desc.get('PERMISSIONS', []) + socket_permissions = desc.get('SOCKET_PERMISSIONS', []) + combined_permissions = list(permissions) + if socket_permissions: + combined_permissions.append({'socket': socket_permissions}) + pretty_permissions = json.dumps(combined_permissions, + sort_keys=True, indent=4) replace = { 'name': desc['TITLE'], 'description': '%s Example' % desc['TITLE'], 'key': True, - 'permissions': desc.get('PERMISSIONS', []), + 'permissions': pretty_permissions, 'version': build_version.ChromeVersionNoTrunk() } RunTemplateFileIfChanged(srcpath, dstpath, replace) diff --git a/native_client_sdk/src/build_tools/parse_dsc.py b/native_client_sdk/src/build_tools/parse_dsc.py index 48c3761..0015562 100755 --- a/native_client_sdk/src/build_tools/parse_dsc.py +++ b/native_client_sdk/src/build_tools/parse_dsc.py @@ -53,6 +53,7 @@ DSC_FORMAT = { 'GROUP': (str, '', False), 'EXPERIMENTAL': (bool, [True, False], False), 'PERMISSIONS': (list, '', False), + 'SOCKET_PERMISSIONS': (list, '', False) } diff --git a/native_client_sdk/src/examples/resources/manifest.json.template b/native_client_sdk/src/examples/resources/manifest.json.template index c4a111c..e7e9760 100644 --- a/native_client_sdk/src/examples/resources/manifest.json.template +++ b/native_client_sdk/src/examples/resources/manifest.json.template @@ -19,10 +19,5 @@ "client_id": "903965034255.apps.googleusercontent.com", "scopes": ["https://www.googleapis.com/auth/drive"] }, - "permissions": [ -[[if permissions:]] -[[ for i, perm in enumerate(permissions):]] - "{{perm}}"{{(i != len(permissions) - 1) and ',' or ''}} -[[]] - ] + "permissions": {{permissions}} } |