Skip to content

Commit df80267

Browse files
rdcroninCommit Bot
authored and
Commit Bot
committed
[Extensions] Clean up API Permission Registration
Clean up API Permission registration to happen directly in the ExtensionAPIProviders, rather than through a separate PermissionsProvider class (though the permissions are still defined in the old file). Permissions are now registered by passing a base::span of APIPermissionInfo::InitInfos to the PermissionsInfo. Also combine alias definition in the same file. This has a number of advantages: - Less code (getting rid of PermissionsProvider, which didn't really add much, and get rid of the separate aliases file). - Avoid constructing a vector or each call to PermissionsProvider::GetAllPermissions(). base::spans are cheaper to construct. - Make all the c-style arrays of APIPermissionInfo::InitInfos static. Avoid reconstructing them. (In practice, this doesn't matter, since these methods should only be called once per process, but it makes it guaranteed should anything change.) This might have a slight improvement on ExtensionsClient init time (since we save on vector construction), but mostly just to simplify things. Bug: 847237 Change-Id: I4e161f899a0b3b9ac816c130222db6ea462ddcc3 Reviewed-on: https://chromium-review.googlesource.com/1225211 Reviewed-by: Luke Halliwell <halliwell@chromium.org> Reviewed-by: Dominick Ng <dominickn@chromium.org> Commit-Queue: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#591875}
1 parent 059b371 commit df80267

35 files changed

+477
-663
lines changed

chrome/browser/extensions/permissions_based_management_policy_provider_unittest.cc

+3-7
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ class PermissionsBasedManagementPolicyProviderTest : public testing::Test {
3636
provider_(settings_.get()) {}
3737

3838
void SetUp() override {
39-
ChromeAPIPermissions api_permissions;
40-
perm_list_ = api_permissions.GetAllPermissions();
4139
pref_service_->registry()->RegisterDictionaryPref(
4240
pref_names::kExtensionManagement);
4341
}
@@ -47,9 +45,9 @@ class PermissionsBasedManagementPolicyProviderTest : public testing::Test {
4745
// Get API permissions name for |id|, we cannot use arbitrary strings since
4846
// they will be ignored by ExtensionManagementService.
4947
std::string GetAPIPermissionName(APIPermission::ID id) {
50-
for (const auto& perm : perm_list_) {
51-
if (perm->id() == id)
52-
return perm->name();
48+
for (const auto& perm : chrome_api_permissions::GetPermissionInfos()) {
49+
if (perm.id == id)
50+
return perm.name;
5351
}
5452
ADD_FAILURE() << "Permission not found: " << id;
5553
return std::string();
@@ -81,8 +79,6 @@ class PermissionsBasedManagementPolicyProviderTest : public testing::Test {
8179
}
8280

8381
protected:
84-
std::vector<std::unique_ptr<APIPermissionInfo>> perm_list_;
85-
8682
std::unique_ptr<TestingPrefServiceSimple> pref_service_;
8783
std::unique_ptr<ExtensionManagement> settings_;
8884

chrome/common/BUILD.gn

-2
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,6 @@ static_library("common") {
324324
"extensions/api/url_handlers/url_handlers_parser.h",
325325
"extensions/api/webstore/webstore_api_constants.cc",
326326
"extensions/api/webstore/webstore_api_constants.h",
327-
"extensions/chrome_aliases.cc",
328-
"extensions/chrome_aliases.h",
329327
"extensions/chrome_extension_messages.h",
330328
"extensions/chrome_extensions_api_provider.cc",
331329
"extensions/chrome_extensions_api_provider.h",

chrome/common/apps/platform_apps/chrome_apps_api_permissions.cc

+13-30
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,21 @@
44

55
#include "chrome/common/apps/platform_apps/chrome_apps_api_permissions.h"
66

7-
#include "base/macros.h"
8-
#include "base/memory/ptr_util.h"
9-
#include "base/stl_util.h"
10-
#include "extensions/common/permissions/api_permission.h"
7+
namespace chrome_apps_api_permissions {
8+
namespace {
119

12-
namespace apps {
10+
// WARNING: If you are modifying a permission message in this list, be sure to
11+
// add the corresponding permission message rule to
12+
// ChromePermissionMessageProvider::GetPermissionMessages as well.
13+
constexpr extensions::APIPermissionInfo::InitInfo permissions_to_register[] = {
14+
{extensions::APIPermission::kBrowser, "browser"},
15+
{extensions::APIPermission::kEasyUnlockPrivate, "easyUnlockPrivate"},
16+
};
1317

14-
ChromeAppsAPIPermissions::ChromeAppsAPIPermissions() = default;
15-
ChromeAppsAPIPermissions::~ChromeAppsAPIPermissions() = default;
18+
} // namespace
1619

17-
std::vector<std::unique_ptr<extensions::APIPermissionInfo>>
18-
ChromeAppsAPIPermissions::GetAllPermissions() const {
19-
// WARNING: If you are modifying a permission message in this list, be sure to
20-
// add the corresponding permission message rule to
21-
// ChromePermissionMessageProvider::GetPermissionMessages as well.
22-
static constexpr extensions::APIPermissionInfo::InitInfo
23-
permissions_to_register[] = {
24-
{extensions::APIPermission::kBrowser, "browser"},
25-
{extensions::APIPermission::kEasyUnlockPrivate, "easyUnlockPrivate"},
26-
};
27-
28-
std::vector<std::unique_ptr<extensions::APIPermissionInfo>> permissions;
29-
permissions.reserve(base::size(permissions_to_register));
30-
31-
for (const auto& permission : permissions_to_register) {
32-
// NOTE: Using base::WrapUnique() because APIPermissionsInfo ctor is
33-
// private.
34-
permissions.push_back(
35-
base::WrapUnique(new extensions::APIPermissionInfo(permission)));
36-
}
37-
38-
return permissions;
20+
base::span<const extensions::APIPermissionInfo::InitInfo> GetPermissionInfos() {
21+
return base::make_span(permissions_to_register);
3922
}
4023

41-
} // namespace apps
24+
} // namespace chrome_apps_api_permissions

chrome/common/apps/platform_apps/chrome_apps_api_permissions.h

+7-20
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,15 @@
55
#ifndef CHROME_COMMON_APPS_PLATFORM_APPS_CHROME_APPS_API_PERMISSIONS_H_
66
#define CHROME_COMMON_APPS_PLATFORM_APPS_CHROME_APPS_API_PERMISSIONS_H_
77

8-
#include <memory>
9-
#include <vector>
8+
#include "base/containers/span.h"
9+
#include "extensions/common/permissions/api_permission.h"
1010

11-
#include "base/macros.h"
12-
#include "extensions/common/permissions/permissions_provider.h"
11+
namespace chrome_apps_api_permissions {
1312

14-
namespace apps {
13+
// Returns the information necessary to construct Chrome app-specific
14+
// APIPermissions.
15+
base::span<const extensions::APIPermissionInfo::InitInfo> GetPermissionInfos();
1516

16-
// A PermissionsProvider responsible for Chrome App API Permissions.
17-
class ChromeAppsAPIPermissions : public extensions::PermissionsProvider {
18-
public:
19-
ChromeAppsAPIPermissions();
20-
~ChromeAppsAPIPermissions() override;
21-
22-
// extensions::PermissionsProvider:
23-
std::vector<std::unique_ptr<extensions::APIPermissionInfo>>
24-
GetAllPermissions() const override;
25-
26-
private:
27-
DISALLOW_COPY_AND_ASSIGN(ChromeAppsAPIPermissions);
28-
};
29-
30-
} // namespace apps
17+
} // namespace chrome_apps_api_permissions
3118

3219
#endif // CHROME_COMMON_APPS_PLATFORM_APPS_CHROME_APPS_API_PERMISSIONS_H_

chrome/common/apps/platform_apps/chrome_apps_api_provider.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "chrome/common/apps/platform_apps/api/api_features.h"
88
#include "chrome/common/apps/platform_apps/api/generated_schemas.h"
99
#include "chrome/common/apps/platform_apps/api/permission_features.h"
10+
#include "chrome/common/apps/platform_apps/chrome_apps_api_permissions.h"
1011
#include "chrome/grit/common_resources.h"
1112
#include "extensions/common/alias.h"
1213
#include "extensions/common/features/json_feature_provider_source.h"
@@ -50,9 +51,10 @@ base::StringPiece ChromeAppsAPIProvider::GetAPISchema(const std::string& name) {
5051
return api::ChromeAppsGeneratedSchemas::Get(name);
5152
}
5253

53-
void ChromeAppsAPIProvider::AddPermissionsProviders(
54+
void ChromeAppsAPIProvider::RegisterPermissions(
5455
extensions::PermissionsInfo* permissions_info) {
55-
permissions_info->AddProvider(api_permissions_, {});
56+
permissions_info->RegisterPermissions(
57+
chrome_apps_api_permissions::GetPermissionInfos(), {});
5658
}
5759

5860
void ChromeAppsAPIProvider::RegisterManifestHandlers() {

chrome/common/apps/platform_apps/chrome_apps_api_provider.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#ifndef CHROME_COMMON_APPS_PLATFORM_APPS_CHROME_APPS_API_PROVIDER_H_
66
#define CHROME_COMMON_APPS_PLATFORM_APPS_CHROME_APPS_API_PROVIDER_H_
77

8-
#include "chrome/common/apps/platform_apps/chrome_apps_api_permissions.h"
98
#include "extensions/common/extensions_api_provider.h"
109

1110
namespace apps {
@@ -24,13 +23,11 @@ class ChromeAppsAPIProvider : public extensions::ExtensionsAPIProvider {
2423
extensions::JSONFeatureProviderSource* json_source) override;
2524
bool IsAPISchemaGenerated(const std::string& name) override;
2625
base::StringPiece GetAPISchema(const std::string& name) override;
27-
void AddPermissionsProviders(
26+
void RegisterPermissions(
2827
extensions::PermissionsInfo* permissions_info) override;
2928
void RegisterManifestHandlers() override;
3029

3130
private:
32-
const ChromeAppsAPIPermissions api_permissions_;
33-
3431
DISALLOW_COPY_AND_ASSIGN(ChromeAppsAPIProvider);
3532
};
3633

chrome/common/extensions/chrome_aliases.cc

-15
This file was deleted.

chrome/common/extensions/chrome_aliases.h

-18
This file was deleted.

chrome/common/extensions/chrome_extensions_api_provider.cc

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
#include "chrome/common/extensions/api/generated_schemas.h"
99
#include "chrome/common/extensions/api/manifest_features.h"
1010
#include "chrome/common/extensions/api/permission_features.h"
11-
#include "chrome/common/extensions/chrome_aliases.h"
1211
#include "chrome/common/extensions/chrome_manifest_handlers.h"
12+
#include "chrome/common/extensions/permissions/chrome_api_permissions.h"
1313
#include "chrome/grit/common_resources.h"
1414
#include "extensions/common/features/json_feature_provider_source.h"
1515
#include "extensions/common/permissions/permissions_info.h"
@@ -53,9 +53,11 @@ base::StringPiece ChromeExtensionsAPIProvider::GetAPISchema(
5353
return api::ChromeGeneratedSchemas::Get(name);
5454
}
5555

56-
void ChromeExtensionsAPIProvider::AddPermissionsProviders(
56+
void ChromeExtensionsAPIProvider::RegisterPermissions(
5757
PermissionsInfo* permissions_info) {
58-
permissions_info->AddProvider(api_permissions_, GetChromePermissionAliases());
58+
permissions_info->RegisterPermissions(
59+
chrome_api_permissions::GetPermissionInfos(),
60+
chrome_api_permissions::GetPermissionAliases());
5961
}
6062

6163
void ChromeExtensionsAPIProvider::RegisterManifestHandlers() {

chrome/common/extensions/chrome_extensions_api_provider.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#define CHROME_COMMON_EXTENSIONS_CHROME_EXTENSIONS_API_PROVIDER_H_
77

88
#include "base/macros.h"
9-
#include "chrome/common/extensions/permissions/chrome_api_permissions.h"
109
#include "extensions/common/extensions_api_provider.h"
1110

1211
namespace extensions {
@@ -24,12 +23,10 @@ class ChromeExtensionsAPIProvider : public ExtensionsAPIProvider {
2423
void AddAPIJSONSources(JSONFeatureProviderSource* json_source) override;
2524
bool IsAPISchemaGenerated(const std::string& name) override;
2625
base::StringPiece GetAPISchema(const std::string& name) override;
27-
void AddPermissionsProviders(PermissionsInfo* permissions_info) override;
26+
void RegisterPermissions(PermissionsInfo* permissions_info) override;
2827
void RegisterManifestHandlers() override;
2928

3029
private:
31-
const ChromeAPIPermissions api_permissions_;
32-
3330
DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsAPIProvider);
3431
};
3532

0 commit comments

Comments
 (0)