// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif #include <stddef.h> #include <memory> #include <utility> #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/permissions/permissions_test_util.h" #include "chrome/browser/extensions/permissions/permissions_updater.h" #include "chrome/browser/extensions/test_extension_environment.h" #include "chrome/common/extensions/permissions/chrome_permission_message_provider.h" #include "chrome/grit/generated_resources.h" #include "chrome/test/base/testing_profile.h" #include "components/crx_file/id_util.h" #include "extensions/browser/extension_prefs.h" #include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" #include "extensions/common/manifest.h" #include "extensions/common/manifest_handlers/permissions_parser.h" #include "extensions/common/permissions/permission_set.h" #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/permissions/permissions_info.h" #include "extensions/common/permissions/usb_device_permission.h" #include "extensions/common/permissions/usb_device_permission_data.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" APIPermissionID; namespace extensions { // Tests that ChromePermissionMessageProvider provides not only correct, but // meaningful permission messages that coalesce correctly where appropriate. // There are 3 types of permission messages that need to be tested: // 1. The combined list of active permissions, displayed at install time (or // when the app has been disabled automatically and needs to be re-enabled) // 2. The split list of active permissions, displayed in the App Info dialog, // where the optional permissions are individually revokable // 3. The list of requested optional permissions, displayed in a prompt to the // user when the app requests these during runtime // Some of these tests are prefixed AntiTest_, since they demonstrate existing // problematic functionality. These tests are prefixed with AntiTest_ and will // be changed as the correct behaviour is implemented. TODOs in the test explain // the currently problematic behaviour. class PermissionMessagesUnittest : public testing::Test { … }; // If an app has both the 'history' and 'tabs' permission, one should hide the // other (the 'history' permission has superset permissions). TEST_F(PermissionMessagesUnittest, HistoryHidesTabsMessage) { … } // If an app requests the 'history' permission, but already has the 'tabs' // permission, only the new coalesced message is displayed. TEST_F(PermissionMessagesUnittest, MixedPermissionMessagesCoalesceOnceGranted) { … } // AntiTest: This behavior should be changed and improved. // If an app requests the 'tabs' permission but already has the 'history' // permission, a prompt is displayed. However, no prompt should appear at all, // since 'tabs' is a subset of 'history' and the final list of permissions are // not affected by this grant. TEST_F(PermissionMessagesUnittest, AntiTest_PromptCanRequestSubsetOfAlreadyGrantedPermissions) { … } // AntiTest: This behavior should be changed and improved. // If an app requests the 'sessions' permission, nothing is displayed in the // permission request prompt. However, the required permissions for the app are // actually modified, so the prompt *should* display a message to prevent this // permission from being granted for free. TEST_F(PermissionMessagesUnittest, AntiTest_PromptCanBeEmptyButCausesChangeInPermissions) { … } class USBDevicePermissionMessagesTest : public testing::Test { … }; TEST_F(USBDevicePermissionMessagesTest, SingleDevice) { … } TEST_F(USBDevicePermissionMessagesTest, MultipleDevice) { … } } // namespace extensions