Commit fc16497e authored by Minh X. Nguyen's avatar Minh X. Nguyen Committed by Commit Bot

[update_client] Add installedby (extension manifest location) to update check requests.

Bug: 722942, 727861, 835936
Change-Id: I256f5b1c54143a0c4ec5dccea668eb669673cc3d
Reviewed-on: https://chromium-review.googlesource.com/1025073Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Reviewed-by: default avatarJoshua Pawlicki <waffles@chromium.org>
Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Commit-Queue: Minh Nguyen <mxnguyen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#553145}
parent dfab13af
......@@ -207,6 +207,7 @@ IN_PROC_BROWSER_TEST_F(UpdateServiceTest, PolicyCorrupted) {
// extension is corrupted:
// - version="0.0.0.0"
// - installsource="reinstall"
// - installedby="policy"
// - enabled="0"
// - <disabled reason="1024"/>
const std::string update_request =
......@@ -214,8 +215,10 @@ IN_PROC_BROWSER_TEST_F(UpdateServiceTest, PolicyCorrupted) {
EXPECT_THAT(update_request,
::testing::HasSubstr(base::StringPrintf(
R"(<app appid="%s" version="0.0.0.0")", kExtensionId)));
EXPECT_THAT(update_request,
::testing::HasSubstr(R"(installsource="reinstall" enabled="0")"));
EXPECT_THAT(
update_request,
::testing::HasSubstr(
R"(installsource="reinstall" installedby="policy" enabled="0")"));
EXPECT_THAT(update_request, ::testing::HasSubstr(base::StringPrintf(
R"(<disabled reason="%d"/>)",
disable_reason::DISABLE_CORRUPTED)));
......@@ -354,6 +357,7 @@ IN_PROC_BROWSER_TEST_F(PolicyUpdateServiceTest, FailedUpdateRetries) {
// extension is corrupted:
// - version="0.0.0.0"
// - installsource="reinstall"
// - installedby="policy"
// - enabled="0"
// - <disabled reason="1024"/>
const std::string update_request =
......@@ -361,8 +365,10 @@ IN_PROC_BROWSER_TEST_F(PolicyUpdateServiceTest, FailedUpdateRetries) {
EXPECT_THAT(update_request,
::testing::HasSubstr(base::StringPrintf(
R"(<app appid="%s" version="0.0.0.0")", id_.c_str())));
EXPECT_THAT(update_request,
::testing::HasSubstr(R"(installsource="reinstall" enabled="0")"));
EXPECT_THAT(
update_request,
::testing::HasSubstr(
R"(installsource="reinstall" installedby="policy" enabled="0")"));
EXPECT_THAT(update_request, ::testing::HasSubstr(base::StringPrintf(
R"(<disabled reason="%d"/>)",
disable_reason::DISABLE_CORRUPTED)));
......@@ -477,8 +483,10 @@ IN_PROC_BROWSER_TEST_F(PolicyUpdateServiceTest, PolicyCorruptedOnStartup) {
EXPECT_THAT(update_request,
::testing::HasSubstr(base::StringPrintf(
R"(<app appid="%s" version="0.0.0.0")", id_.c_str())));
EXPECT_THAT(update_request,
::testing::HasSubstr(R"(installsource="reinstall" enabled="0")"));
EXPECT_THAT(
update_request,
::testing::HasSubstr(
R"(installsource="reinstall" installedby="policy" enabled="0")"));
EXPECT_THAT(update_request, ::testing::HasSubstr(base::StringPrintf(
R"(<disabled reason="%d"/>)",
disable_reason::DISABLE_CORRUPTED)));
......
......@@ -350,6 +350,9 @@ std::string BuildUpdateCheckRequest(
crx_component.install_source.c_str());
else if (component.is_foreground())
base::StringAppendF(&app, " installsource=\"ondemand\"");
if (!crx_component.install_location.empty())
base::StringAppendF(&app, " installedby=\"%s\"",
crx_component.install_location.c_str());
for (const auto& attr : installer_attributes) {
base::StringAppendF(&app, " %s=\"%s\"", attr.first.c_str(),
attr.second.c_str());
......
......@@ -258,6 +258,11 @@ struct CrxComponent {
// For extension, this information is set from the update service, which
// gets the install source from the update URL.
std::string install_source;
// Information about where the component/extension was loaded from.
// For extensions, this information is inferred from the extension
// registry.
std::string install_location;
};
// Called when a non-blocking call of UpdateClient completes.
......
......@@ -18,6 +18,7 @@
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/browser/updater/manifest_fetch_data.h"
#include "extensions/common/extension.h"
namespace extensions {
......@@ -101,6 +102,8 @@ void UpdateDataProvider::GetData(
}
}
info->install_source = extension_data.install_source;
info->install_location =
ManifestFetchData::GetSimpleLocationString(extension->location());
}
}
......
......@@ -89,7 +89,8 @@ class UpdateDataProviderTest : public ExtensionsTest {
void AddExtension(const std::string& extension_id,
const std::string& version,
bool enabled,
int disable_reasons) {
int disable_reasons,
Manifest::Location location) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
ASSERT_TRUE(base::PathExists(temp_dir.GetPath()));
......@@ -109,6 +110,7 @@ class UpdateDataProviderTest : public ExtensionsTest {
.Build());
builder.SetID(extension_id);
builder.SetPath(temp_dir.GetPath());
builder.SetLocation(location);
auto* test_browser_client =
static_cast<UpdateDataProviderExtensionsBrowserClient*>(
......@@ -148,7 +150,7 @@ TEST_F(UpdateDataProviderTest, GetData_EnabledExtension) {
const std::string version = "0.1.2.3";
AddExtension(kExtensionId1, version, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE, Manifest::INTERNAL);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -161,6 +163,7 @@ TEST_F(UpdateDataProviderTest, GetData_EnabledExtension) {
EXPECT_EQ(version, data[0].version.GetString());
EXPECT_NE(nullptr, data[0].installer.get());
EXPECT_EQ(0UL, data[0].disabled_reasons.size());
EXPECT_EQ("internal", data[0].install_location);
}
TEST_F(UpdateDataProviderTest, GetData_EnabledExtensionWithData) {
......@@ -169,7 +172,8 @@ TEST_F(UpdateDataProviderTest, GetData_EnabledExtensionWithData) {
const std::string version = "0.1.2.3";
AddExtension(kExtensionId1, version, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::EXTERNAL_PREF);
ExtensionUpdateDataMap update_data;
auto& info = update_data[kExtensionId1];
......@@ -183,6 +187,7 @@ TEST_F(UpdateDataProviderTest, GetData_EnabledExtensionWithData) {
ASSERT_EQ(1UL, data.size());
EXPECT_EQ("0.0.0.0", data[0].version.GetString());
EXPECT_EQ("webstore", data[0].install_source);
EXPECT_EQ("external", data[0].install_location);
EXPECT_NE(nullptr, data[0].installer.get());
EXPECT_EQ(0UL, data[0].disabled_reasons.size());
}
......@@ -193,7 +198,8 @@ TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_WithNoReason) {
const std::string version = "0.1.2.3";
AddExtension(kExtensionId1, version, false,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::EXTERNAL_REGISTRY);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -208,6 +214,7 @@ TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_WithNoReason) {
ASSERT_EQ(1UL, data[0].disabled_reasons.size());
EXPECT_EQ(disable_reason::DisableReason::DISABLE_NONE,
data[0].disabled_reasons[0]);
EXPECT_EQ("external", data[0].install_location);
}
TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_UnknownReason) {
......@@ -216,7 +223,8 @@ TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_UnknownReason) {
const std::string version = "0.1.2.3";
AddExtension(kExtensionId1, version, false,
disable_reason::DisableReason::DISABLE_REASON_LAST);
disable_reason::DisableReason::DISABLE_REASON_LAST,
Manifest::COMMAND_LINE);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -231,6 +239,7 @@ TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_UnknownReason) {
ASSERT_EQ(1UL, data[0].disabled_reasons.size());
EXPECT_EQ(disable_reason::DisableReason::DISABLE_NONE,
data[0].disabled_reasons[0]);
EXPECT_EQ("other", data[0].install_location);
}
TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_WithReasons) {
......@@ -240,7 +249,8 @@ TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_WithReasons) {
const std::string version = "0.1.2.3";
AddExtension(kExtensionId1, version, false,
disable_reason::DisableReason::DISABLE_USER_ACTION |
disable_reason::DisableReason::DISABLE_CORRUPTED);
disable_reason::DisableReason::DISABLE_CORRUPTED,
Manifest::EXTERNAL_POLICY_DOWNLOAD);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -257,6 +267,7 @@ TEST_F(UpdateDataProviderTest, GetData_DisabledExtension_WithReasons) {
data[0].disabled_reasons[0]);
EXPECT_EQ(disable_reason::DisableReason::DISABLE_CORRUPTED,
data[0].disabled_reasons[1]);
EXPECT_EQ("policy", data[0].install_location);
}
TEST_F(UpdateDataProviderTest,
......@@ -268,7 +279,8 @@ TEST_F(UpdateDataProviderTest,
AddExtension(kExtensionId1, version, false,
disable_reason::DisableReason::DISABLE_USER_ACTION |
disable_reason::DisableReason::DISABLE_CORRUPTED |
disable_reason::DisableReason::DISABLE_REASON_LAST);
disable_reason::DisableReason::DISABLE_REASON_LAST,
Manifest::EXTERNAL_PREF_DOWNLOAD);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -287,6 +299,7 @@ TEST_F(UpdateDataProviderTest,
data[0].disabled_reasons[1]);
EXPECT_EQ(disable_reason::DisableReason::DISABLE_CORRUPTED,
data[0].disabled_reasons[2]);
EXPECT_EQ("external", data[0].install_location);
}
TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions) {
......@@ -297,9 +310,10 @@ TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions) {
const std::string version1 = "0.1.2.3";
const std::string version2 = "9.8.7.6";
AddExtension(kExtensionId1, version1, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::EXTERNAL_REGISTRY);
AddExtension(kExtensionId2, version2, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE, Manifest::UNPACKED);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -313,9 +327,11 @@ TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions) {
EXPECT_EQ(version1, data[0].version.GetString());
EXPECT_NE(nullptr, data[0].installer.get());
EXPECT_EQ(0UL, data[0].disabled_reasons.size());
EXPECT_EQ("external", data[0].install_location);
EXPECT_EQ(version2, data[1].version.GetString());
EXPECT_NE(nullptr, data[1].installer.get());
EXPECT_EQ(0UL, data[1].disabled_reasons.size());
EXPECT_EQ("other", data[1].install_location);
}
TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions_DisabledExtension) {
......@@ -326,9 +342,11 @@ TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions_DisabledExtension) {
const std::string version1 = "0.1.2.3";
const std::string version2 = "9.8.7.6";
AddExtension(kExtensionId1, version1, false,
disable_reason::DisableReason::DISABLE_CORRUPTED);
disable_reason::DisableReason::DISABLE_CORRUPTED,
Manifest::INTERNAL);
AddExtension(kExtensionId2, version2, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::EXTERNAL_PREF_DOWNLOAD);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -344,10 +362,12 @@ TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions_DisabledExtension) {
ASSERT_EQ(1UL, data[0].disabled_reasons.size());
EXPECT_EQ(disable_reason::DisableReason::DISABLE_CORRUPTED,
data[0].disabled_reasons[0]);
EXPECT_EQ("internal", data[0].install_location);
EXPECT_EQ(version2, data[1].version.GetString());
EXPECT_NE(nullptr, data[1].installer.get());
EXPECT_EQ(0UL, data[1].disabled_reasons.size());
EXPECT_EQ("external", data[1].install_location);
}
TEST_F(UpdateDataProviderTest,
......@@ -358,7 +378,8 @@ TEST_F(UpdateDataProviderTest,
const std::string version = "0.1.2.3";
AddExtension(kExtensionId1, version, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::COMPONENT);
ExtensionUpdateDataMap update_data;
update_data[kExtensionId1] = {};
......@@ -372,6 +393,7 @@ TEST_F(UpdateDataProviderTest,
EXPECT_EQ(version, data[0].version.GetString());
EXPECT_NE(nullptr, data[0].installer.get());
EXPECT_EQ(0UL, data[0].disabled_reasons.size());
EXPECT_EQ("other", data[0].install_location);
}
TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions_CorruptExtension) {
......@@ -384,9 +406,11 @@ TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions_CorruptExtension) {
const std::string version2 = "9.8.7.6";
const std::string initial_version = "0.0.0.0";
AddExtension(kExtensionId1, version1, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::EXTERNAL_COMPONENT);
AddExtension(kExtensionId2, version2, true,
disable_reason::DisableReason::DISABLE_NONE);
disable_reason::DisableReason::DISABLE_NONE,
Manifest::EXTERNAL_POLICY);
ExtensionUpdateDataMap update_data;
auto& info1 = update_data[kExtensionId1];
......@@ -403,10 +427,12 @@ TEST_F(UpdateDataProviderTest, GetData_MultipleExtensions_CorruptExtension) {
ASSERT_EQ(2UL, data.size());
EXPECT_EQ(version1, data[0].version.GetString());
EXPECT_EQ("webstore", data[0].install_source);
EXPECT_EQ("other", data[0].install_location);
EXPECT_NE(nullptr, data[0].installer.get());
EXPECT_EQ(0UL, data[0].disabled_reasons.size());
EXPECT_EQ(initial_version, data[1].version.GetString());
EXPECT_EQ("sideload", data[1].install_source);
EXPECT_EQ("policy", data[1].install_location);
EXPECT_NE(nullptr, data[1].installer.get());
EXPECT_EQ(0UL, data[1].disabled_reasons.size());
}
......
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