Index: chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc |
diff --git a/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc b/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e73481103ef03b8771d7ffad402ab282b432524b |
--- /dev/null |
+++ b/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc |
@@ -0,0 +1,102 @@ |
+// Copyright 2014 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 "chrome/common/extensions/permissions/chrome_permission_message_provider.h" |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "chrome/grit/generated_resources.h" |
+#include "extensions/common/permissions/permissions_data.h" |
+#include "extensions/strings/grit/extensions_strings.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+namespace extensions { |
+ |
+// Tests that ChromePermissionMessageProvider provides correct permission |
+// messages for given permissions. |
+// NOTE: No extensions are created as part of these tests. Integration tests |
+// that test the messages are generated properly for extensions can be found in |
+// chrome/browser/extensions/permission_messages_unittest.cc. |
+class ChromePermissionMessageProviderUnittest : public testing::Test { |
+ public: |
+ ChromePermissionMessageProviderUnittest() |
+ : message_provider_(new ChromePermissionMessageProvider()) {} |
+ virtual ~ChromePermissionMessageProviderUnittest() {} |
+ |
+ protected: |
+ std::vector<base::string16> GetMessages(APIPermissionSet& permissions, |
+ Manifest::Type type) { |
+ scoped_refptr<const PermissionSet> permission_set = new PermissionSet( |
+ permissions, ManifestPermissionSet(), URLPatternSet(), URLPatternSet()); |
+ return message_provider_->GetWarningMessages(permission_set.get(), type); |
+ } |
+ |
+ private: |
+ scoped_ptr<ChromePermissionMessageProvider> message_provider_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ChromePermissionMessageProviderUnittest); |
+}; |
+ |
+// Checks that two related permissions display individual messages when they are |
+// the only permission, but combine into one message when they are both present. |
+TEST_F(ChromePermissionMessageProviderUnittest, RelatedPermissionsCoalesce) { |
+ APIPermissionSet permissions; |
+ std::vector<base::string16> messages; |
+ |
+ permissions.clear(); |
+ permissions.insert(APIPermission::kUsb); |
+ messages = GetMessages(permissions, Manifest::TYPE_PLATFORM_APP); |
+ ASSERT_EQ(1U, messages.size()); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_USB), |
+ messages[0]); |
+ |
+ permissions.clear(); |
+ permissions.insert(APIPermission::kSerial); |
+ messages = GetMessages(permissions, Manifest::TYPE_PLATFORM_APP); |
+ ASSERT_EQ(1U, messages.size()); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL), |
+ messages[0]); |
+ |
+ permissions.clear(); |
+ permissions.insert(APIPermission::kSerial); |
+ permissions.insert(APIPermission::kUsb); |
+ messages = GetMessages(permissions, Manifest::TYPE_PLATFORM_APP); |
+ ASSERT_EQ(1U, messages.size()); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_USB_SERIAL), |
+ messages[0]); |
+} |
+ |
+// Checks that if an app has a superset and a subset permission, only the |
+// superset permission message is displayed if thye are both present. |
+TEST_F(ChromePermissionMessageProviderUnittest, |
+ SupersetOverridesSubsetPermission) { |
+ APIPermissionSet permissions; |
+ std::vector<base::string16> messages; |
+ |
+ permissions.clear(); |
+ permissions.insert(APIPermission::kTab); |
+ messages = GetMessages(permissions, Manifest::TYPE_PLATFORM_APP); |
+ ASSERT_EQ(1U, messages.size()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ), |
+ messages[0]); |
+ |
+ permissions.clear(); |
+ permissions.insert(APIPermission::kTopSites); |
+ messages = GetMessages(permissions, Manifest::TYPE_PLATFORM_APP); |
+ ASSERT_EQ(1U, messages.size()); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_TOPSITES), |
+ messages[0]); |
+ |
+ permissions.clear(); |
+ permissions.insert(APIPermission::kTab); |
+ permissions.insert(APIPermission::kTopSites); |
+ messages = GetMessages(permissions, Manifest::TYPE_PLATFORM_APP); |
+ ASSERT_EQ(1U, messages.size()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ), |
+ messages[0]); |
+} |
+ |
+} // namespace extensions |