Commit 7496f63c authored by treib's avatar treib Committed by Commit bot

Extension install prompt: in the delegated permissions prompt, include optional permissions

Followup to https://codereview.chromium.org/850283003.

BUG=397951

Review URL: https://codereview.chromium.org/968183002

Cr-Commit-Position: refs/heads/master@{#319055}
parent 90cb3195
......@@ -36,6 +36,7 @@
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/manifest_handlers/icons_handler.h"
#include "extensions/common/manifest_handlers/permissions_parser.h"
#include "extensions/common/permissions/permission_message_provider.h"
#include "extensions/common/permissions/permission_set.h"
#include "extensions/common/permissions/permissions_data.h"
......@@ -924,6 +925,15 @@ void ExtensionInstallPrompt::ShowConfirmation() {
.InitializePermissions(extension_);
permissions_to_display =
extension_->permissions_data()->active_permissions();
// For delegated installs, all optional permissions are pre-approved by the
// person who triggers the install, so add them to the list.
if (prompt_->type() == DELEGATED_PERMISSIONS_PROMPT) {
scoped_refptr<const PermissionSet> optional_permissions =
extensions::PermissionsParser::GetOptionalPermissions(extension_);
permissions_to_display = PermissionSet::CreateUnion(
permissions_to_display.get(),
optional_permissions.get());
}
}
if (permissions_to_display.get() &&
......
......@@ -53,14 +53,14 @@ TEST(ExtensionInstallPromptUnittest, PromptShowsPermissionWarnings) {
.Set("version", "1.0")
.Set("manifest_version", 2)
.Set("description", "Random Ext")).Build();
ExtensionInstallPrompt prompt(NULL /* no web contents in this test */);
ExtensionInstallPrompt prompt(nullptr /* no web contents in this test */);
base::RunLoop run_loop;
prompt.set_callback_for_test(
base::Bind(&VerifyPromptPermissionsCallback,
run_loop.QuitClosure(),
1u, // |regular_permissions_count|.
0u)); // |withheld_permissions_count|.
prompt.ConfirmPermissions(NULL, // no delegate
prompt.ConfirmPermissions(nullptr, // no delegate
extension.get(),
permission_set.get());
run_loop.Run();
......@@ -73,24 +73,24 @@ TEST(ExtensionInstallPromptUnittest, PromptShowsWithheldPermissions) {
FeatureSwitch::ScopedOverride enable_scripts_switch(
FeatureSwitch::scripts_require_action(), true);
ListBuilder permissions;
permissions.Append("http://*/*");
permissions.Append("http://www.google.com/");
permissions.Append("tabs");
scoped_refptr<const Extension> extension =
ExtensionBuilder().SetManifest(
DictionaryBuilder().Set("name", "foo")
.Set("version", "1.0")
.Set("manifest_version", 2)
.Set("description", "Random Ext")
.Set("permissions", permissions)).Build();
ExtensionInstallPrompt prompt(NULL /* no web contents in this test */);
.Set("permissions",
ListBuilder().Append("http://*/*")
.Append("http://www.google.com/")
.Append("tabs")))
.Build();
ExtensionInstallPrompt prompt(nullptr /* no web contents in this test */);
base::RunLoop run_loop;
// We expect <all_hosts> to be withheld, but http://www.google.com/ and tabs
// permissions should be granted as regular permissions.
prompt.ConfirmInstall(
NULL,
nullptr,
extension.get(),
base::Bind(&VerifyPromptPermissionsCallback,
run_loop.QuitClosure(),
......@@ -99,4 +99,30 @@ TEST(ExtensionInstallPromptUnittest, PromptShowsWithheldPermissions) {
run_loop.Run();
}
TEST(ExtensionInstallPromptUnittest, DelegatedPromptShowsOptionalPermissions) {
content::TestBrowserThreadBundle thread_bundle;
scoped_refptr<const Extension> extension =
ExtensionBuilder().SetManifest(
DictionaryBuilder().Set("name", "foo")
.Set("version", "1.0")
.Set("manifest_version", 2)
.Set("description", "Random Ext")
.Set("permissions", ListBuilder().Append("tabs"))
.Set("optional_permissions",
ListBuilder().Append("location")))
.Build();
ExtensionInstallPrompt prompt(nullptr /* no web contents in this test */);
base::RunLoop run_loop;
prompt.set_callback_for_test(
base::Bind(&VerifyPromptPermissionsCallback,
run_loop.QuitClosure(),
2u, // |regular_permissions_count|.
0u)); // |withheld_permissions_count|.
prompt.ConfirmPermissionsForDelegatedInstall(nullptr, // no delegate
extension.get(),
"Username",
nullptr); // no icon
run_loop.Run();
}
} // namespace extensions
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment