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

Report two new fields for CBCM reporting

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: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714929}
parent daa49ca1
......@@ -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"
......@@ -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());
}
}
}
......
......@@ -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
......@@ -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;
}
......@@ -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));
......@@ -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);
......@@ -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
......@@ -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.
......
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