Skip to content

Commit

Permalink
Report two new fields for CBCM reporting
Browse files Browse the repository at this point in the history
Upload a boolean that indicates whether the extension comes from CWS.
Upload a string that represents the app launch url for (legacy) packaged
app and hosted_app.

Bug: 1024039
Change-Id: Ieda4675fed256b4919266aaf7271fb1b4e538478
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1912832
Commit-Queue: Owen Min <zmin@chromium.org>
Reviewed-by: Julian Pastarmov <pastarmovj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714929}
  • Loading branch information
Owen Min authored and Commit Bot committed Nov 13, 2019
1 parent daa49ca commit 3b650d6
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 19 deletions.
6 changes: 6 additions & 0 deletions chrome/browser/enterprise_reporting/extension_info.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "chrome/browser/enterprise_reporting/extension_info.h"

#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/extension_set.h"
#include "extensions/common/manifest_url_handlers.h"
Expand Down Expand Up @@ -104,6 +105,11 @@ void AddExtensions(const extensions::ExtensionSet& extensions,
extension_info->set_enabled(enabled);
AddPermission(extension.get(), extension_info);
AddHostPermission(extension.get(), extension_info);
extension_info->set_from_webstore(extension->from_webstore());
if (extension->is_app()) {
extension_info->set_app_launch_url(
extensions::AppLaunchInfo::GetFullLaunchURL(extension.get()).spec());
}
}
}

Expand Down
74 changes: 55 additions & 19 deletions chrome/browser/enterprise_reporting/extension_info_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const char kHomepage[] = "https://foo.com/extension";
const char kPermission1[] = "alarms";
const char kPermission2[] = "idle";
const char kPermission3[] = "*://*.example.com/*";
const char kAppLaunchUrl[] = "https://www.example.com/";

} // namespace

Expand All @@ -37,24 +38,30 @@ class ExtensionInfoTest : public extensions::ExtensionServiceTestBase {
service()->Init();
}

scoped_refptr<const extensions::Extension> BuildExtension() {
return BuildExtension(kId, extensions::Manifest::UNPACKED);
}
scoped_refptr<const extensions::Extension> BuildExtension(
const std::string& id,
extensions::Manifest::Location location) {
auto extension =
extensions::ExtensionBuilder(kName)
.SetID(id)
.SetVersion(kVersion)
.SetManifestKey(extensions::manifest_keys::kDescription,
kDescription)
.SetManifestKey(extensions::manifest_keys::kHomepageURL, kHomepage)
.SetLocation(location)
.AddPermission(kPermission1)
.AddPermission(kPermission2)
.AddPermission(kPermission3)
.Build();
const std::string& id = kId,
extensions::Manifest::Location location = extensions::Manifest::UNPACKED,
bool is_app = false,
bool from_webstore = false) {
extensions::ExtensionBuilder extensionBuilder(
kName, (is_app ? extensions::ExtensionBuilder::Type::PLATFORM_APP
: extensions::ExtensionBuilder::Type::EXTENSION));
extensionBuilder.SetID(id)
.SetVersion(kVersion)
.SetManifestKey(extensions::manifest_keys::kDescription, kDescription)
.SetManifestKey(extensions::manifest_keys::kHomepageURL, kHomepage)
.SetLocation(location)
.AddPermission(kPermission1)
.AddPermission(kPermission2)
.AddPermission(kPermission3);
if (is_app) {
extensionBuilder.SetManifestPath({"app", "launch", "web_url"},
kAppLaunchUrl);
}
if (from_webstore) {
extensionBuilder.AddFlags(extensions::Extension::FROM_WEBSTORE);
}
auto extension = extensionBuilder.Build();
service()->AddExtension(extension.get());
return extension;
}
Expand Down Expand Up @@ -82,6 +89,7 @@ TEST_F(ExtensionInfoTest, ExtensionReport) {
EXPECT_EQ(kHomepage, actual_extension_report.homepage_url());

EXPECT_TRUE(actual_extension_report.enabled());
EXPECT_FALSE(actual_extension_report.from_webstore());

EXPECT_EQ(2, actual_extension_report.permissions_size());
EXPECT_EQ(kPermission1, actual_extension_report.permissions(0));
Expand All @@ -91,8 +99,8 @@ TEST_F(ExtensionInfoTest, ExtensionReport) {
}

TEST_F(ExtensionInfoTest, MultipleExtensions) {
auto extension1 = BuildExtension(kId, extensions::Manifest::UNPACKED);
auto extension2 = BuildExtension(kId2, extensions::Manifest::UNPACKED);
auto extension1 = BuildExtension(kId);
auto extension2 = BuildExtension(kId2);

em::ChromeUserProfileInfo info;
AppendExtensionInfoIntoProfileReport(profile(), &info);
Expand Down Expand Up @@ -158,4 +166,32 @@ TEST_F(ExtensionInfoTest, ComponentExtension) {
EXPECT_EQ(0, info.extensions_size());
}

TEST_F(ExtensionInfoTest, FromWebstoreFlag) {
auto extension1 = BuildExtension(kId, extensions::Manifest::UNPACKED,
/*is_app=*/false, /*from_webstore=*/false);
auto extension2 = BuildExtension(kId2, extensions::Manifest::UNPACKED,
/*is_app=*/false, /*from_webstore=*/true);

em::ChromeUserProfileInfo info;
AppendExtensionInfoIntoProfileReport(profile(), &info);

EXPECT_EQ(2, info.extensions_size());
EXPECT_FALSE(info.extensions(0).from_webstore());
EXPECT_TRUE(info.extensions(1).from_webstore());
}

TEST_F(ExtensionInfoTest, AppLaunchURLTest) {
auto extension1 =
BuildExtension(kId, extensions::Manifest::UNPACKED, /*is_app=*/false);
auto extension2 =
BuildExtension(kId2, extensions::Manifest::UNPACKED, /*is_app=*/true);

em::ChromeUserProfileInfo info;
AppendExtensionInfoIntoProfileReport(profile(), &info);

EXPECT_EQ(2, info.extensions_size());
EXPECT_FALSE(info.extensions(0).has_app_launch_url());
EXPECT_EQ(kAppLaunchUrl, info.extensions(1).app_launch_url());
}

} // namespace enterprise_reporting
6 changes: 6 additions & 0 deletions components/policy/proto/device_management_backend.proto
Original file line number Diff line number Diff line change
Expand Up @@ -1232,6 +1232,12 @@ message Extension {

// The list of host based permissions the extension requires.
repeated string host_permissions = 11;

// URL of the app, used by (legacy) packaged app and hosted app.
optional string app_launch_url = 12;

// True if the extension comes from web store.
optional bool from_webstore = 13;
}

// Plugin information.
Expand Down

0 comments on commit 3b650d6

Please sign in to comment.