blob: 0c6e31b774a8f98e7c030379d65f6c7cef1e016d [file] [log] [blame]
// 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()) {}
~ChromePermissionMessageProviderUnittest() override {}
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