From c41003476ce57ae410821397bedc90310d3dc37b Mon Sep 17 00:00:00 2001 From: "yoz@chromium.org" Date: Sat, 19 Oct 2013 15:37:25 +0000 Subject: 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 --- extensions/common/extensions_client.cc | 6 +-- extensions/common/extensions_client.h | 14 ++++-- .../permissions/permission_message_provider.cc | 16 ++++++ .../permissions/permission_message_provider.h | 58 ++++++++++++++++++++++ extensions/extensions.gyp | 2 + 5 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 extensions/common/permissions/permission_message_provider.cc create mode 100644 extensions/common/permissions/permission_message_provider.h (limited to 'extensions') 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 + +#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 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 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', -- cgit v1.1