diff options
author | dennisjeffrey@google.com <dennisjeffrey@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-31 16:06:01 +0000 |
---|---|---|
committer | dennisjeffrey@google.com <dennisjeffrey@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-31 16:06:01 +0000 |
commit | 41cac760afee4c4ce8f7edaa51840ce4a01c24a0 (patch) | |
tree | c4fdbbc285bd85c3dca4d315dc2e1f66c7186ab4 | |
parent | 729c242feefd19a011364d9e211a22bc8c6c35aa (diff) | |
download | chromium_src-41cac760afee4c4ce8f7edaa51840ce4a01c24a0.zip chromium_src-41cac760afee4c4ce8f7edaa51840ce4a01c24a0.tar.gz chromium_src-41cac760afee4c4ce8f7edaa51840ce4a01c24a0.tar.bz2 |
Modify GetExtensionsInfo automation hook to return permission information.
The GetExtensionsInfo automation hook now returns information about the
host and api permissions that are associated with each extension. A sample
PyAuto test is included that uses this new functionality.
BUG=77948
TEST=None.
Review URL: http://codereview.chromium.org/6777028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80006 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/automation/testing_automation_provider.cc | 30 | ||||
-rw-r--r-- | chrome/test/functional/extensions.py | 27 | ||||
-rw-r--r-- | chrome/test/pyautolib/pyauto.py | 14 |
3 files changed, 68 insertions, 3 deletions
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc index d8cce3b..fbeca19 100644 --- a/chrome/browser/automation/testing_automation_provider.cc +++ b/chrome/browser/automation/testing_automation_provider.cc @@ -79,6 +79,9 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/extensions/extension.h" +#include "chrome/common/extensions/extension_extent.h" +#include "chrome/common/extensions/url_pattern.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "content/browser/renderer_host/render_process_host.h" @@ -3814,6 +3817,31 @@ void TestingAutomationProvider::GetThemeInfo( AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); } +namespace { + +ListValue* GetHostPermissions(const Extension* ext) { + ListValue* permissions = new ListValue; + const URLPatternList pattern_list = + ext->GetEffectiveHostPermissions().patterns(); + for (URLPatternList::const_iterator perm = pattern_list.begin(); + perm != pattern_list.end(); ++perm) { + permissions->Append(new StringValue(perm->GetAsString())); + } + return permissions; +} + +ListValue* GetAPIPermissions(const Extension* ext) { + ListValue* permissions = new ListValue; + std::set<std::string> perm_list = ext->api_permissions(); + for (std::set<std::string>::const_iterator perm = perm_list.begin(); + perm != perm_list.end(); ++perm) { + permissions->Append(new StringValue(perm->c_str())); + } + return permissions; +} + +} // namespace + // Sample json input: { "command": "GetExtensionsInfo" } // See GetExtensionsInfo() in chrome/test/pyautolib/pyauto.py for sample json // output. @@ -3842,6 +3870,8 @@ void TestingAutomationProvider::GetExtensionsInfo( extension->background_url().spec()); extension_value->SetString("options_url", extension->options_url().spec()); + extension_value->Set("host_permissions", GetHostPermissions(extension)); + extension_value->Set("api_permissions", GetAPIPermissions(extension)); extensions_values->Append(extension_value); } return_value->Set("extensions", extensions_values); diff --git a/chrome/test/functional/extensions.py b/chrome/test/functional/extensions.py index 41f9664..97146d5 100644 --- a/chrome/test/functional/extensions.py +++ b/chrome/test/functional/extensions.py @@ -1,5 +1,5 @@ #!/usr/bin/python -# Copyright (c) 2010 The Chromium Authors. All rights reserved. +# Copyright (c) 2011 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -122,6 +122,31 @@ class ExtensionsTest(pyauto.PyUITest): self.assertFalse(failed_extensions, 'Extension(s) in failing group: %s' % failed_extensions) + def testGetExtensionPermissions(self): + """Ensures we can retrieve the host/api permissions for an extension. + + This test assumes that the 'Bookmark Manager' extension exists in a fresh + profile. + """ + extensions_info = self.GetExtensionsInfo() + bm_exts = [x for x in extensions_info if x['name'] == 'Bookmark Manager'] + self.assertTrue(bm_exts, msg='Could not find info for the Bookmark ' + 'Manager extension.') + ext = bm_exts[0] + + permissions_host = ext['host_permissions'] + self.assertTrue(len(permissions_host) == 2 and + 'chrome://favicon/*' in permissions_host and + 'chrome://resources/*' in permissions_host, + msg='Unexpected host permissions information.') + + permissions_api = ext['api_permissions'] + self.assertTrue(len(permissions_api) == 3 and + 'bookmarks' in permissions_api and + 'experimental' in permissions_api and + 'tabs' in permissions_api, + msg='Unexpected host permissions information.') + if __name__ == '__main__': pyauto_functional.Main() diff --git a/chrome/test/pyautolib/pyauto.py b/chrome/test/pyautolib/pyauto.py index 2439928..1813875 100644 --- a/chrome/test/pyautolib/pyauto.py +++ b/chrome/test/pyautolib/pyauto.py @@ -1190,20 +1190,30 @@ class PyUITest(pyautolib.PyUITestBase, unittest.TestCase): Returns: A list of dictionaries representing each of the installed extensions. Example: - [ { u'background_url': u'', + [ { u'api_permissions': [u'bookmarks', u'experimental', u'tabs'], + u'background_url': u'', u'description': u'Bookmark Manager', + u'host_permissions': [u'chrome://favicon/*', u'chrome://resources/*'], u'id': u'eemcgdkfndhakfknompkggombfjjjeno', u'name': u'Bookmark Manager', u'options_url': u'', + u'public_key': u'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQcByy+eN9jza\ + zWF/DPn7NW47sW7lgmpk6eKc0BQM18q8hvEM3zNm2n7HkJv/R6f\ + U+X5mtqkDuKvq5skF6qqUF4oEyaleWDFhd1xFwV7JV+/DU7bZ00\ + w2+6gzqsabkerFpoP33ZRIw7OviJenP0c0uWqDWF8EGSyMhB3tx\ + qhOtiQIDAQAB', u'version': u'0.1' }, - { u'background_url': u'chrome-extension://\ + { u'api_permissions': [...], + u'background_url': u'chrome-extension://\ lkdedmbpkaiahjjibfdmpoefffnbdkli/\ background.html', u'description': u'Extension which lets you read your Facebook news \ feed and wall. You can also post status updates.', + u'host_permissions': [...], u'id': u'lkdedmbpkaiahjjibfdmpoefffnbdkli', u'name': u'Facebook for Google Chrome', u'options_url': u'', + u'public_key': u'...', u'version': u'2.0.9' } ] """ cmd_dict = { # Prepare command for the json interface |