| Index: extensions/common/permissions/permission_message_provider.cc | 
| diff --git a/extensions/common/permissions/permission_message_provider.cc b/extensions/common/permissions/permission_message_provider.cc | 
| index 80cc582883ee117beddb1c1653b2859acdf79bd6..f194340ed0c517aae5bda34ce102a1545d7729b9 100644 | 
| --- a/extensions/common/permissions/permission_message_provider.cc | 
| +++ b/extensions/common/permissions/permission_message_provider.cc | 
| @@ -4,16 +4,47 @@ | 
|  | 
| #include "extensions/common/permissions/permission_message_provider.h" | 
|  | 
| +#include "base/metrics/field_trial.h" | 
| #include "base/strings/string_split.h" | 
| #include "extensions/common/extensions_client.h" | 
|  | 
| namespace extensions { | 
|  | 
| +namespace { | 
| + | 
| +ForceForTesting g_force_permission_system_for_testing = | 
| +    ForceForTesting::DONT_FORCE; | 
| + | 
| +bool IsNewPermissionMessageSystemEnabled() { | 
| +  if (g_force_permission_system_for_testing != ForceForTesting::DONT_FORCE) | 
| +    return g_force_permission_system_for_testing == ForceForTesting::FORCE_NEW; | 
| +  const std::string group_name = | 
| +      base::FieldTrialList::FindFullName("PermissionMessageSystem"); | 
| +  return group_name == "NewSystem"; | 
| +} | 
| + | 
| +}  // namespace | 
| + | 
| +void ForcePermissionMessageSystemForTesting( | 
| +    ForceForTesting force) { | 
| +  g_force_permission_system_for_testing = force; | 
| +} | 
| + | 
| PermissionMessageString::PermissionMessageString( | 
| const CoalescedPermissionMessage& message) | 
| : message(message.message()), submessages(message.submessages()) { | 
| } | 
|  | 
| +PermissionMessageString::PermissionMessageString(const base::string16& message) | 
| +    : message(message) { | 
| +} | 
| + | 
| +PermissionMessageString::PermissionMessageString( | 
| +    const base::string16& message, | 
| +    const std::vector<base::string16>& submessages) | 
| +    : message(message), submessages(submessages) { | 
| +} | 
| + | 
| PermissionMessageString::PermissionMessageString(const base::string16& message, | 
| const base::string16& details) | 
| : message(message) { | 
| @@ -28,4 +59,26 @@ const PermissionMessageProvider* PermissionMessageProvider::Get() { | 
| return &(ExtensionsClient::Get()->GetPermissionMessageProvider()); | 
| } | 
|  | 
| +PermissionMessageStrings | 
| +PermissionMessageProvider::GetPermissionMessageStrings( | 
| +    const PermissionSet* permissions, | 
| +    Manifest::Type extension_type) const { | 
| +  PermissionMessageStrings strings; | 
| +  if (IsNewPermissionMessageSystemEnabled()) { | 
| +    CoalescedPermissionMessages messages = GetCoalescedPermissionMessages( | 
| +        GetAllPermissionIDs(permissions, extension_type)); | 
| +    for (const CoalescedPermissionMessage& msg : messages) | 
| +      strings.push_back(PermissionMessageString(msg)); | 
| +  } else { | 
| +    std::vector<base::string16> messages = | 
| +        GetLegacyWarningMessages(permissions, extension_type); | 
| +    std::vector<base::string16> details = | 
| +        GetLegacyWarningMessagesDetails(permissions, extension_type); | 
| +    DCHECK_EQ(messages.size(), details.size()); | 
| +    for (size_t i = 0; i < messages.size(); i++) | 
| +      strings.push_back(PermissionMessageString(messages[i], details[i])); | 
| +  } | 
| +  return strings; | 
| +} | 
| + | 
| }  // namespace extensions | 
|  |