summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordennisjeffrey@google.com <dennisjeffrey@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-31 16:06:01 +0000
committerdennisjeffrey@google.com <dennisjeffrey@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-31 16:06:01 +0000
commit41cac760afee4c4ce8f7edaa51840ce4a01c24a0 (patch)
treec4fdbbc285bd85c3dca4d315dc2e1f66c7186ab4
parent729c242feefd19a011364d9e211a22bc8c6c35aa (diff)
downloadchromium_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.cc30
-rw-r--r--chrome/test/functional/extensions.py27
-rw-r--r--chrome/test/pyautolib/pyauto.py14
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