|  | // Copyright 2018 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "extensions/common/permissions/api_permission.h" | 
|  |  | 
|  | #include <map> | 
|  | #include <set> | 
|  | #include <string> | 
|  |  | 
|  | #include "base/containers/contains.h" | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/files/file_util.h" | 
|  | #include "base/path_service.h" | 
|  | #include "base/strings/stringprintf.h" | 
|  | #include "base/test/metrics/histogram_enum_reader.h" | 
|  | #include "extensions/common/alias.h" | 
|  | #include "extensions/common/permissions/permissions_info.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | // Tests that the ExtensionPermission3 enum in enums.xml exactly matches the | 
|  | // mojom::APIPermissionID enum in Mojom. | 
|  | TEST(ExtensionAPIPermissionTest, CheckEnums) { | 
|  | std::optional<base::HistogramEnumEntryMap> enums = base::ReadEnumFromEnumsXml( | 
|  | "ExtensionPermission3", /*subdirectory=*/"extensions"); | 
|  | ASSERT_TRUE(enums); | 
|  | // The number of enums in the histogram entry should be equal to the number of | 
|  | // enums in the C++ file. | 
|  | EXPECT_EQ(enums->size(), | 
|  | static_cast<size_t>(mojom::APIPermissionID::kMaxValue) + 1); | 
|  |  | 
|  | base::FilePath src_root; | 
|  | ASSERT_TRUE(base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT, &src_root)); | 
|  | base::FilePath permission_histogram_value = | 
|  | src_root.AppendASCII("extensions") | 
|  | .AppendASCII("common") | 
|  | .AppendASCII("mojom") | 
|  | .AppendASCII("api_permission_id.mojom"); | 
|  | ASSERT_TRUE(base::PathExists(permission_histogram_value)); | 
|  |  | 
|  | std::string file_contents; | 
|  | ASSERT_TRUE( | 
|  | base::ReadFileToString(permission_histogram_value, &file_contents)); | 
|  |  | 
|  | for (const auto& entry : *enums) { | 
|  | // Check that the Mojo file has a definition equal to the histogram file. | 
|  | // For now, we do this in a simple, but reasonably effective, manner: | 
|  | // expecting to find the string "ENTRY = <value>" somewhere in the file. | 
|  | std::string expected_string = | 
|  | base::StringPrintf("%s = %d", entry.second.c_str(), entry.first); | 
|  | EXPECT_TRUE(base::Contains(file_contents, expected_string)) | 
|  | << "Failed to find entry " << entry.second << " with value " | 
|  | << entry.first; | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(ExtensionAPIPermissionTest, ManagedSessionLoginWarningFlag) { | 
|  | PermissionsInfo* info = PermissionsInfo::GetInstance(); | 
|  |  | 
|  | constexpr APIPermissionInfo::InitInfo init_info[] = { | 
|  | {mojom::APIPermissionID::kUnknown, "test permission", | 
|  | APIPermissionInfo::kFlagImpliesFullURLAccess | | 
|  | APIPermissionInfo:: | 
|  | kFlagDoesNotRequireManagedSessionFullLoginWarning}}; | 
|  |  | 
|  | info->RegisterPermissions(base::span(init_info), | 
|  | base::span<const extensions::Alias>()); | 
|  |  | 
|  | EXPECT_FALSE(info->GetByID(mojom::APIPermissionID::kUnknown) | 
|  | ->requires_managed_session_full_login_warning()); | 
|  | } | 
|  |  | 
|  | }  // namespace extensions |