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 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/enterprise_reporting/extension_info.h" #include "chrome/browser/enterprise_reporting/extension_info.h"
#include "chrome/browser/profiles/profile.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/browser/extension_registry.h"
#include "extensions/common/extension_set.h" #include "extensions/common/extension_set.h"
#include "extensions/common/manifest_url_handlers.h" #include "extensions/common/manifest_url_handlers.h"
...@@ -104,6 +105,11 @@ void AddExtensions(const extensions::ExtensionSet& extensions, ...@@ -104,6 +105,11 @@ void AddExtensions(const extensions::ExtensionSet& extensions,
extension_info->set_enabled(enabled); extension_info->set_enabled(enabled);
AddPermission(extension.get(), extension_info); AddPermission(extension.get(), extension_info);
AddHostPermission(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"; ...@@ -26,6 +26,7 @@ const char kHomepage[] = "https://foo.com/extension";
const char kPermission1[] = "alarms"; const char kPermission1[] = "alarms";
const char kPermission2[] = "idle"; const char kPermission2[] = "idle";
const char kPermission3[] = "*://*.example.com/*"; const char kPermission3[] = "*://*.example.com/*";
const char kAppLaunchUrl[] = "https://www.example.com/";
} // namespace } // namespace
...@@ -37,24 +38,30 @@ class ExtensionInfoTest : public extensions::ExtensionServiceTestBase { ...@@ -37,24 +38,30 @@ class ExtensionInfoTest : public extensions::ExtensionServiceTestBase {
service()->Init(); service()->Init();
} }
scoped_refptr<const extensions::Extension> BuildExtension() {
return BuildExtension(kId, extensions::Manifest::UNPACKED);
}
scoped_refptr<const extensions::Extension> BuildExtension( scoped_refptr<const extensions::Extension> BuildExtension(
const std::string& id, const std::string& id = kId,
extensions::Manifest::Location location) { extensions::Manifest::Location location = extensions::Manifest::UNPACKED,
auto extension = bool is_app = false,
extensions::ExtensionBuilder(kName) bool from_webstore = false) {
.SetID(id) extensions::ExtensionBuilder extensionBuilder(
.SetVersion(kVersion) kName, (is_app ? extensions::ExtensionBuilder::Type::PLATFORM_APP
.SetManifestKey(extensions::manifest_keys::kDescription, : extensions::ExtensionBuilder::Type::EXTENSION));
kDescription) extensionBuilder.SetID(id)
.SetManifestKey(extensions::manifest_keys::kHomepageURL, kHomepage) .SetVersion(kVersion)
.SetLocation(location) .SetManifestKey(extensions::manifest_keys::kDescription, kDescription)
.AddPermission(kPermission1) .SetManifestKey(extensions::manifest_keys::kHomepageURL, kHomepage)
.AddPermission(kPermission2) .SetLocation(location)
.AddPermission(kPermission3) .AddPermission(kPermission1)
.Build(); .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()); service()->AddExtension(extension.get());
return extension; return extension;
} }
...@@ -82,6 +89,7 @@ TEST_F(ExtensionInfoTest, ExtensionReport) { ...@@ -82,6 +89,7 @@ TEST_F(ExtensionInfoTest, ExtensionReport) {
EXPECT_EQ(kHomepage, actual_extension_report.homepage_url()); EXPECT_EQ(kHomepage, actual_extension_report.homepage_url());
EXPECT_TRUE(actual_extension_report.enabled()); EXPECT_TRUE(actual_extension_report.enabled());
EXPECT_FALSE(actual_extension_report.from_webstore());
EXPECT_EQ(2, actual_extension_report.permissions_size()); EXPECT_EQ(2, actual_extension_report.permissions_size());
EXPECT_EQ(kPermission1, actual_extension_report.permissions(0)); EXPECT_EQ(kPermission1, actual_extension_report.permissions(0));
...@@ -91,8 +99,8 @@ TEST_F(ExtensionInfoTest, ExtensionReport) { ...@@ -91,8 +99,8 @@ TEST_F(ExtensionInfoTest, ExtensionReport) {
} }
TEST_F(ExtensionInfoTest, MultipleExtensions) { TEST_F(ExtensionInfoTest, MultipleExtensions) {
auto extension1 = BuildExtension(kId, extensions::Manifest::UNPACKED); auto extension1 = BuildExtension(kId);
auto extension2 = BuildExtension(kId2, extensions::Manifest::UNPACKED); auto extension2 = BuildExtension(kId2);
em::ChromeUserProfileInfo info; em::ChromeUserProfileInfo info;
AppendExtensionInfoIntoProfileReport(profile(), &info); AppendExtensionInfoIntoProfileReport(profile(), &info);
...@@ -158,4 +166,32 @@ TEST_F(ExtensionInfoTest, ComponentExtension) { ...@@ -158,4 +166,32 @@ TEST_F(ExtensionInfoTest, ComponentExtension) {
EXPECT_EQ(0, info.extensions_size()); 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 } // namespace enterprise_reporting
...@@ -1232,6 +1232,12 @@ message Extension { ...@@ -1232,6 +1232,12 @@ message Extension {
// The list of host based permissions the extension requires. // The list of host based permissions the extension requires.
repeated string host_permissions = 11; 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. // 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