Commit 3eb2fcaa authored by Owen Min's avatar Owen Min Committed by Commit Bot

Filter out pending notification extension request during upload

Extension request are moved out of the pending list once user confirm
the notification. However, there is no need to upload these requests
anymore as long as admin made an decision.

Bug: 1006899
Change-Id: I332917f15abf27a96c0ba42736841fd0316b7dbd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079643
Commit-Queue: Owen Min <zmin@chromium.org>
Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746019}
parent c076c61b
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/enterprise_reporting/extension_info.h" #include "chrome/browser/enterprise_reporting/extension_info.h"
#include "chrome/browser/enterprise_reporting/policy_info.h" #include "chrome/browser/enterprise_reporting/policy_info.h"
#include "chrome/browser/extensions/extension_management.h"
#include "chrome/browser/policy/chrome_policy_conversions_client.h" #include "chrome/browser/policy/chrome_policy_conversions_client.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
...@@ -21,10 +22,27 @@ ...@@ -21,10 +22,27 @@
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/account_info.h"
#include "components/signin/public/identity_manager/identity_manager.h" #include "components/signin/public/identity_manager/identity_manager.h"
#include "extensions/common/extension_urls.h"
namespace enterprise_reporting { namespace enterprise_reporting {
namespace {
// Extension request are moved out of the pending list once user confirm the
// notification. However, there is no need to upload these requests anymore as
// long as admin made a decision.
bool ShouldUploadExtensionRequest(
const std::string& extension_id,
const std::string& webstore_update_url,
extensions::ExtensionManagement* extension_management) {
auto mode = extension_management->GetInstallationMode(extension_id,
webstore_update_url);
return (mode == extensions::ExtensionManagement::INSTALLATION_BLOCKED ||
mode == extensions::ExtensionManagement::INSTALLATION_REMOVED) &&
!extension_management->IsInstallationExplicitlyBlocked(extension_id);
}
ProfileReportGenerator::ProfileReportGenerator() {} } // namespace
ProfileReportGenerator::ProfileReportGenerator() = default;
ProfileReportGenerator::~ProfileReportGenerator() = default; ProfileReportGenerator::~ProfileReportGenerator() = default;
...@@ -108,7 +126,16 @@ void ProfileReportGenerator::GetExtensionRequest() { ...@@ -108,7 +126,16 @@ void ProfileReportGenerator::GetExtensionRequest() {
if (!pending_requests) if (!pending_requests)
return; return;
extensions::ExtensionManagement* extension_management =
extensions::ExtensionManagementFactory::GetForBrowserContext(profile_);
std::string webstore_update_url =
extension_urls::GetDefaultWebstoreUpdateUrl().spec();
for (const auto& it : *pending_requests) { for (const auto& it : *pending_requests) {
if (!ShouldUploadExtensionRequest(it.first, webstore_update_url,
extension_management)) {
continue;
}
auto* request = report_->add_extension_requests(); auto* request = report_->add_extension_requests();
request->set_id(it.first); request->set_id(it.first);
base::Optional<base::Time> timestamp = ::util::ValueToTime( base::Optional<base::Time> timestamp = ::util::ValueToTime(
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chrome/browser/enterprise_reporting/profile_report_generator.h" #include "chrome/browser/enterprise_reporting/profile_report_generator.h"
#include "base/json/json_reader.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/util/values/values_util.h" #include "base/util/values/values_util.h"
...@@ -18,6 +19,7 @@ ...@@ -18,6 +19,7 @@
#include "components/policy/core/common/policy_map.h" #include "components/policy/core/common/policy_map.h"
#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/signin/public/identity_manager/identity_test_environment.h"
#include "content/public/test/browser_task_environment.h" #include "content/public/test/browser_task_environment.h"
#include "extensions/browser/pref_names.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace enterprise_reporting { namespace enterprise_reporting {
...@@ -26,8 +28,21 @@ namespace { ...@@ -26,8 +28,21 @@ namespace {
constexpr char kProfile[] = "Profile"; constexpr char kProfile[] = "Profile";
constexpr char kIdleProfile[] = "IdleProfile"; constexpr char kIdleProfile[] = "IdleProfile";
constexpr char kExtensionId[] = "abcdefghijklmnopabcdefghijklmnop"; constexpr char kExtensionId[] = "abcdefghijklmnopabcdefghijklmnop";
constexpr char kExtensionId2[] = "abcdefghijklmnopabcdefghijklmnpo";
constexpr int kFakeTime = 123456; constexpr int kFakeTime = 123456;
constexpr char kAllowedExtensionSettings[] = R"({
"abcdefghijklmnopabcdefghijklmnop" : {
"installation_mode": "allowed"
}
})";
constexpr char kBlockedExtensionSettings[] = R"({
"abcdefghijklmnopabcdefghijklmnop" : {
"installation_mode": "blocked"
}
})";
} // namespace } // namespace
class ProfileReportGeneratorTest : public ::testing::Test { class ProfileReportGeneratorTest : public ::testing::Test {
...@@ -100,6 +115,15 @@ class ProfileReportGeneratorTest : public ::testing::Test { ...@@ -100,6 +115,15 @@ class ProfileReportGeneratorTest : public ::testing::Test {
prefs::kCloudExtensionRequestIds, std::move(id_values)); prefs::kCloudExtensionRequestIds, std::move(id_values));
} }
void SetExtensionSettings(const std::string& settings_string) {
base::Optional<base::Value> settings =
base::JSONReader::Read(settings_string);
ASSERT_TRUE(settings.has_value());
profile()->GetTestingPrefService()->SetManagedPref(
extensions::pref_names::kExtensionManagement,
base::Value::ToUniquePtrValue(std::move(*settings)));
}
TestingProfile* profile() { return profile_; } TestingProfile* profile() { return profile_; }
TestingProfileManager* profile_manager() { return &profile_manager_; } TestingProfileManager* profile_manager() { return &profile_manager_; }
...@@ -185,4 +209,30 @@ TEST_F(ProfileReportGeneratorTest, NoPendingRequestWhenItsDisabled) { ...@@ -185,4 +209,30 @@ TEST_F(ProfileReportGeneratorTest, NoPendingRequestWhenItsDisabled) {
EXPECT_EQ(0, report->extension_requests_size()); EXPECT_EQ(0, report->extension_requests_size());
} }
TEST_F(ProfileReportGeneratorTest, FilterOutApprovedPendingRequest) {
profile()->GetTestingPrefService()->SetManagedPref(
prefs::kCloudExtensionRequestEnabled,
std::make_unique<base::Value>(true));
SetExtensionSettings(kAllowedExtensionSettings);
std::vector<std::string> ids = {kExtensionId, kExtensionId2};
SetExtensionToPendingList(ids);
auto report = GenerateReport();
ASSERT_EQ(1, report->extension_requests_size());
EXPECT_EQ(kExtensionId2, report->extension_requests(0).id());
}
TEST_F(ProfileReportGeneratorTest, FilterOutBlockedPendingRequest) {
profile()->GetTestingPrefService()->SetManagedPref(
prefs::kCloudExtensionRequestEnabled,
std::make_unique<base::Value>(true));
SetExtensionSettings(kBlockedExtensionSettings);
std::vector<std::string> ids = {kExtensionId, kExtensionId2};
SetExtensionToPendingList(ids);
auto report = GenerateReport();
ASSERT_EQ(1, report->extension_requests_size());
EXPECT_EQ(kExtensionId2, report->extension_requests(0).id());
}
} // namespace enterprise_reporting } // namespace enterprise_reporting
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