summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authoryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-19 15:37:25 +0000
committeryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-19 15:37:25 +0000
commitc41003476ce57ae410821397bedc90310d3dc37b (patch)
tree6d5138b602c715658594caef851fdfa228662afc /extensions
parent2da80093a7b99a024427c5091b99926d970b108b (diff)
downloadchromium_src-c41003476ce57ae410821397bedc90310d3dc37b.zip
chromium_src-c41003476ce57ae410821397bedc90310d3dc37b.tar.gz
chromium_src-c41003476ce57ae410821397bedc90310d3dc37b.tar.bz2
Move permission warning message handling from PermissionSet to PermissionMessageProvider.
This refactors PermissionSet to be closer to just a set of permissions and moves the understanding of permission message strings to a utility class. BUG=162530 Review URL: https://codereview.chromium.org/27446002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@229565 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions')
-rw-r--r--extensions/common/extensions_client.cc6
-rw-r--r--extensions/common/extensions_client.h14
-rw-r--r--extensions/common/permissions/permission_message_provider.cc16
-rw-r--r--extensions/common/permissions/permission_message_provider.h58
-rw-r--r--extensions/extensions.gyp2
5 files changed, 88 insertions, 8 deletions
diff --git a/extensions/common/extensions_client.cc b/extensions/common/extensions_client.cc
index e7f936d..ccca164 100644
--- a/extensions/common/extensions_client.cc
+++ b/extensions/common/extensions_client.cc
@@ -11,10 +11,6 @@ namespace {
ExtensionsClient* g_client = NULL;
-void Initialize(ExtensionsClient* client) {
- client->RegisterManifestHandlers();
-}
-
} // namespace
ExtensionsClient* ExtensionsClient::Get() {
@@ -26,7 +22,7 @@ void ExtensionsClient::Set(ExtensionsClient* client) {
if (g_client)
return;
g_client = client;
- Initialize(g_client);
+ g_client->Initialize();
}
} // namespace extensions
diff --git a/extensions/common/extensions_client.h b/extensions/common/extensions_client.h
index eb3ebfe..ed06d32 100644
--- a/extensions/common/extensions_client.h
+++ b/extensions/common/extensions_client.h
@@ -12,6 +12,7 @@ namespace extensions {
class FeatureProvider;
class PermissionMessage;
+class PermissionMessageProvider;
class PermissionsProvider;
class URLPatternSet;
@@ -19,16 +20,23 @@ class URLPatternSet;
// process. This should be implemented by the client of the extensions system.
class ExtensionsClient {
public:
+ // Initializes global state. Not done in the constructor because unit tests
+ // can create additional ExtensionsClients because the utility thread runs
+ // in-process.
+ virtual void Initialize() = 0;
+
// Returns a PermissionsProvider to initialize the permissions system.
virtual const PermissionsProvider& GetPermissionsProvider() const = 0;
+ // Returns the global PermissionMessageProvider to use to provide permission
+ // warning strings.
+ virtual const PermissionMessageProvider& GetPermissionMessageProvider()
+ const = 0;
+
// Gets a feature provider for a specific feature type.
virtual FeatureProvider* GetFeatureProviderByName(const std::string& name)
const = 0;
- // Called at startup. Registers the handlers for parsing manifests.
- virtual void RegisterManifestHandlers() const = 0;
-
// Takes the list of all hosts and filters out those with special
// permission strings. Adds the regular hosts to |new_hosts|,
// and adds the special permission messages to |messages|.
diff --git a/extensions/common/permissions/permission_message_provider.cc b/extensions/common/permissions/permission_message_provider.cc
new file mode 100644
index 0000000..5650eab
--- /dev/null
+++ b/extensions/common/permissions/permission_message_provider.cc
@@ -0,0 +1,16 @@
+// Copyright 2013 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.
+
+#include "extensions/common/permissions/permission_message_provider.h"
+
+#include "extensions/common/extensions_client.h"
+
+namespace extensions {
+
+// static
+const PermissionMessageProvider* PermissionMessageProvider::Get() {
+ return &(ExtensionsClient::Get()->GetPermissionMessageProvider());
+}
+
+} // namespace extensions
diff --git a/extensions/common/permissions/permission_message_provider.h b/extensions/common/permissions/permission_message_provider.h
new file mode 100644
index 0000000..7f682e3
--- /dev/null
+++ b/extensions/common/permissions/permission_message_provider.h
@@ -0,0 +1,58 @@
+// Copyright 2013 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.
+
+#ifndef EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_MESSAGE_PROVIDER_H_
+#define EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_MESSAGE_PROVIDER_H_
+
+#include <vector>
+
+#include "extensions/common/manifest.h"
+#include "extensions/common/permissions/permission_message.h"
+
+namespace extensions {
+
+class PermissionSet;
+
+// The PermissionMessageProvider interprets permissions, translating them
+// into warning messages to show to the user. It also determines whether
+// a new set of permissions entails showing new warning messages.
+class PermissionMessageProvider {
+ public:
+ PermissionMessageProvider() {}
+ virtual ~PermissionMessageProvider() {}
+
+ // Return the global permission message provider.
+ static const PermissionMessageProvider* Get();
+
+ // Gets the localized permission messages that represent this set.
+ // The set of permission messages shown varies by extension type.
+ virtual PermissionMessages GetPermissionMessages(
+ const PermissionSet* permissions,
+ Manifest::Type extension_type) const = 0;
+
+ // Gets the localized permission messages that represent this set (represented
+ // as strings). The set of permission messages shown varies by extension type.
+ virtual std::vector<string16> GetWarningMessages(
+ const PermissionSet* permissions,
+ Manifest::Type extension_type) const = 0;
+
+ // Gets the localized permission details for messages that represent this set
+ // (represented as strings). The set of permission messages shown varies by
+ // extension type.
+ virtual std::vector<string16> GetWarningMessagesDetails(
+ const PermissionSet* permissions,
+ Manifest::Type extension_type) const = 0;
+
+ // Returns true if |new_permissions| has a greater privilege level than
+ // |old_permissions|.
+ // Whether certain permissions are considered varies by extension type.
+ virtual bool IsPrivilegeIncrease(
+ const PermissionSet* old_permissions,
+ const PermissionSet* new_permissions,
+ Manifest::Type extension_type) const = 0;
+};
+
+} // namespace extensions
+
+#endif // EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_MESSAGE_PROVIDER_H_
diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp
index 6c4b3e2..0db3b4f 100644
--- a/extensions/extensions.gyp
+++ b/extensions/extensions.gyp
@@ -70,6 +70,8 @@
'common/permissions/api_permission_set.h',
'common/permissions/permission_message.cc',
'common/permissions/permission_message.h',
+ 'common/permissions/permission_message_provider.cc',
+ 'common/permissions/permission_message_provider.h',
'common/permissions/permissions_info.cc',
'common/permissions/permissions_info.h',
'common/permissions/permissions_provider.h',