Componentize component_updater: Use Configurator to build query parameters.
This also breaks a few more misc. bonds between chrome/common and component_updater.
BUG=371463
Review URL: https://codereview.chromium.org/375973003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282444 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/component_updater/component_updater_configurator.cc b/chrome/browser/component_updater/component_updater_configurator.cc
index f9027e7..5e8d047 100644
--- a/chrome/browser/component_updater/component_updater_configurator.cc
+++ b/chrome/browser/component_updater/component_updater_configurator.cc
@@ -11,7 +11,10 @@
#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/strings/string_util.h"
+#include "base/version.h"
#include "build/build_config.h"
+#include "chrome/browser/omaha_query_params/chrome_omaha_query_params_delegate.h"
+#include "chrome/common/chrome_version_info.h"
#include "components/component_updater/component_updater_switches.h"
#include "net/url_request/url_request_context_getter.h"
#include "url/gurl.h"
@@ -101,6 +104,10 @@
virtual int OnDemandDelay() const OVERRIDE;
virtual GURL UpdateUrl() const OVERRIDE;
virtual GURL PingUrl() const OVERRIDE;
+ virtual base::Version GetBrowserVersion() const OVERRIDE;
+ virtual std::string GetChannel() const OVERRIDE;
+ virtual std::string GetLang() const OVERRIDE;
+ virtual std::string GetOSLongName() const OVERRIDE;
virtual std::string ExtraRequestParams() const OVERRIDE;
virtual size_t UrlSizeLimit() const OVERRIDE;
virtual net::URLRequestContextGetter* RequestContext() const OVERRIDE;
@@ -183,6 +190,22 @@
return pings_enabled_ ? GURL(kPingUrl) : GURL();
}
+base::Version ChromeConfigurator::GetBrowserVersion() const {
+ return base::Version(chrome::VersionInfo().Version());
+}
+
+std::string ChromeConfigurator::GetChannel() const {
+ return ChromeOmahaQueryParamsDelegate::GetChannelString();
+}
+
+std::string ChromeConfigurator::GetLang() const {
+ return ChromeOmahaQueryParamsDelegate::GetLang();
+}
+
+std::string ChromeConfigurator::GetOSLongName() const {
+ return chrome::VersionInfo().OSType();
+}
+
std::string ChromeConfigurator::ExtraRequestParams() const {
return extra_info_;
}
diff --git a/chrome/browser/component_updater/component_updater_configurator.h b/chrome/browser/component_updater/component_updater_configurator.h
index 9cb73bd8..49fbf93 100644
--- a/chrome/browser/component_updater/component_updater_configurator.h
+++ b/chrome/browser/component_updater/component_updater_configurator.h
@@ -11,6 +11,7 @@
namespace base {
class CommandLine;
+class Version;
}
namespace net {
@@ -53,6 +54,21 @@
// pings are disabled.
virtual GURL PingUrl() const = 0;
+ // Version of the application. Used to compare the component manifests.
+ virtual base::Version GetBrowserVersion() const = 0;
+
+ // Returns the value we use for the "updaterchannel=" and "prodchannel="
+ // parameters. Possible return values include: "canary", "dev", "beta", and
+ // "stable".
+ virtual std::string GetChannel() const = 0;
+
+ // Returns the language for the present locale. Possible return values are
+ // standard tags for languages, such as "en", "en-US", "de", "fr", "af", etc.
+ virtual std::string GetLang() const = 0;
+
+ // Returns the OS's long name like "Windows", "Mac OS X", etc.
+ virtual std::string GetOSLongName() const = 0;
+
// Parameters added to each url request. It can be empty if none are needed.
// The return string must be safe for insertion as an attribute in an
// XML element.
diff --git a/chrome/browser/component_updater/component_updater_ping_manager.cc b/chrome/browser/component_updater/component_updater_ping_manager.cc
index 27951f0f..eb98f65 100644
--- a/chrome/browser/component_updater/component_updater_ping_manager.cc
+++ b/chrome/browser/component_updater/component_updater_ping_manager.cc
@@ -40,7 +40,7 @@
public:
PingSender();
- void SendPing(const GURL& ping_url,
+ void SendPing(const Configurator& config,
net::URLRequestContextGetter* url_request_context_getter,
const CrxUpdateItem* item);
@@ -50,7 +50,8 @@
// Overrides for URLFetcherDelegate.
virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
- static std::string BuildPing(const CrxUpdateItem* item);
+ static std::string BuildPing(const Configurator& config,
+ const CrxUpdateItem* item);
static std::string BuildDownloadCompleteEventElements(
const CrxUpdateItem* item);
static std::string BuildUpdateCompleteEventElement(const CrxUpdateItem* item);
@@ -71,20 +72,23 @@
}
void PingSender::SendPing(
- const GURL& ping_url,
+ const Configurator& config,
net::URLRequestContextGetter* url_request_context_getter,
const CrxUpdateItem* item) {
DCHECK(item);
- if (!ping_url.is_valid())
+ if (!config.PingUrl().is_valid())
return;
- url_fetcher_.reset(SendProtocolRequest(
- ping_url, BuildPing(item), this, url_request_context_getter));
+ url_fetcher_.reset(SendProtocolRequest(config.PingUrl(),
+ BuildPing(config, item),
+ this,
+ url_request_context_getter));
}
// Builds a ping message for the specified update item.
-std::string PingSender::BuildPing(const CrxUpdateItem* item) {
+std::string PingSender::BuildPing(const Configurator& config,
+ const CrxUpdateItem* item) {
const char app_element_format[] =
"<app appid=\"%s\" version=\"%s\" nextversion=\"%s\">"
"%s"
@@ -98,7 +102,12 @@
BuildUpdateCompleteEventElement(item).c_str(), // update event
BuildDownloadCompleteEventElements(item).c_str())); // download events
- return BuildProtocolRequest(app_element, "");
+ return BuildProtocolRequest(config.GetBrowserVersion().GetString(),
+ config.GetChannel(),
+ config.GetLang(),
+ config.GetOSLongName(),
+ app_element,
+ "");
}
// Returns a string representing a sequence of download complete events
@@ -190,7 +199,7 @@
// sender object self-deletes after sending the ping.
void PingManager::OnUpdateComplete(const CrxUpdateItem* item) {
PingSender* ping_sender(new PingSender);
- ping_sender->SendPing(config_.PingUrl(), config_.RequestContext(), item);
+ ping_sender->SendPing(config_, config_.RequestContext(), item);
}
} // namespace component_updater
diff --git a/chrome/browser/component_updater/component_updater_service.cc b/chrome/browser/component_updater/component_updater_service.cc
index 50efcb67..3fa2aca 100644
--- a/chrome/browser/component_updater/component_updater_service.cc
+++ b/chrome/browser/component_updater/component_updater_service.cc
@@ -29,7 +29,6 @@
#include "chrome/browser/component_updater/crx_update_item.h"
#include "chrome/browser/component_updater/update_checker.h"
#include "chrome/browser/component_updater/update_response.h"
-#include "chrome/common/chrome_version_info.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/resource_controller.h"
#include "content/public/browser/resource_throttle.h"
@@ -263,8 +262,6 @@
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
- const Version chrome_version_;
-
bool running_;
ObserverList<Observer> observer_list_;
@@ -282,7 +279,6 @@
GetSequencedTaskRunnerWithShutdownBehavior(
BrowserThread::GetBlockingPool()->GetSequenceToken(),
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
- chrome_version_(chrome::VersionInfo().Version()),
running_(false) {
}
@@ -720,7 +716,8 @@
}
if (!it->manifest.browser_min_version.empty()) {
- if (IsVersionNewer(chrome_version_, it->manifest.browser_min_version)) {
+ if (IsVersionNewer(config_->GetBrowserVersion(),
+ it->manifest.browser_min_version)) {
// The component is not compatible with this Chrome version.
VLOG(1) << "Ignoring incompatible component: " << crx->id;
ChangeItemState(crx, CrxUpdateItem::kNoUpdate);
diff --git a/chrome/browser/component_updater/component_updater_utils.cc b/chrome/browser/component_updater/component_updater_utils.cc
index d7ff01b4..1991171 100644
--- a/chrome/browser/component_updater/component_updater_utils.cc
+++ b/chrome/browser/component_updater/component_updater_utils.cc
@@ -15,9 +15,8 @@
#include "base/strings/stringprintf.h"
#include "base/sys_info.h"
#include "base/win/windows_version.h"
+#include "chrome/browser/component_updater/component_updater_configurator.h"
#include "chrome/browser/component_updater/crx_update_item.h"
-#include "chrome/browser/omaha_query_params/chrome_omaha_query_params_delegate.h"
-#include "chrome/common/chrome_version_info.h"
#include "components/omaha_query_params/omaha_query_params.h"
#include "extensions/common/extension.h"
#include "net/base/load_flags.h"
@@ -40,14 +39,14 @@
} // namespace
-std::string BuildProtocolRequest(const std::string& request_body,
+std::string BuildProtocolRequest(const std::string& browser_version,
+ const std::string& channel,
+ const std::string& lang,
+ const std::string& os_long_name,
+ const std::string& request_body,
const std::string& additional_attributes) {
const std::string prod_id(
OmahaQueryParams::GetProdIdString(OmahaQueryParams::CHROME));
- const chrome::VersionInfo chrome_version_info;
- const std::string chrome_version(chrome_version_info.Version());
- const std::string channel(ChromeOmahaQueryParamsDelegate::GetChannelString());
- const std::string lang(ChromeOmahaQueryParamsDelegate::GetLang());
std::string request(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
@@ -63,8 +62,8 @@
"requestid=\"{%s}\" lang=\"%s\" updaterchannel=\"%s\" prodchannel=\"%s\" "
"os=\"%s\" arch=\"%s\" nacl_arch=\"%s\"",
prod_id.c_str(),
- chrome_version.c_str(), // "version"
- chrome_version.c_str(), // "prodversion"
+ browser_version.c_str(), // "version"
+ browser_version.c_str(), // "prodversion"
base::GenerateGUID().c_str(), // "requestid"
lang.c_str(), // "lang",
channel.c_str(), // "updaterchannel"
@@ -89,7 +88,7 @@
base::StringAppendF(
&request,
"<os platform=\"%s\" version=\"%s\" arch=\"%s\"/>",
- chrome::VersionInfo().OSType().c_str(), // "platform"
+ os_long_name.c_str(), // "platform"
base::SysInfo().OperatingSystemVersion().c_str(), // "version"
base::SysInfo().OperatingSystemArchitecture().c_str()); // "arch"
diff --git a/chrome/browser/component_updater/component_updater_utils.h b/chrome/browser/component_updater/component_updater_utils.h
index 7c238d2..b4b29432 100644
--- a/chrome/browser/component_updater/component_updater_utils.h
+++ b/chrome/browser/component_updater/component_updater_utils.h
@@ -22,6 +22,7 @@
namespace component_updater {
+class Configurator;
struct CrxUpdateItem;
// An update protocol request starts with a common preamble which includes
@@ -44,7 +45,11 @@
// If specified, |additional_attributes| are appended as attributes of the
// request element. The additional attributes have to be well-formed for
// insertion in the request element.
-std::string BuildProtocolRequest(const std::string& request_body,
+std::string BuildProtocolRequest(const std::string& browser_version,
+ const std::string& channel,
+ const std::string& lang,
+ const std::string& os_long_name,
+ const std::string& request_body,
const std::string& additional_attributes);
// Sends a protocol request to the the service endpoint specified by |url|.
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win.cc b/chrome/browser/component_updater/sw_reporter_installer_win.cc
index 513362f..578a70c 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win.cc
+++ b/chrome/browser/component_updater/sw_reporter_installer_win.cc
@@ -28,8 +28,8 @@
#include "chrome/browser/component_updater/component_updater_service.h"
#include "chrome/browser/component_updater/component_updater_utils.h"
#include "chrome/browser/component_updater/default_component_installer.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/pref_names.h"
+#include "components/component_updater/component_updater_paths.h"
+#include "components/component_updater/pref_names.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
@@ -162,8 +162,8 @@
// The base directory on windows looks like:
// <profile>\AppData\Local\Google\Chrome\User Data\SwReporter\.
base::FilePath result;
- PathService::Get(chrome::DIR_USER_DATA, &result);
- return result.Append(FILE_PATH_LITERAL("SwReporter"));
+ PathService::Get(DIR_SW_REPORTER, &result);
+ return result;
}
static std::string ID() {
diff --git a/chrome/browser/component_updater/test/test_configurator.cc b/chrome/browser/component_updater/test/test_configurator.cc
index 8cf49d2..1bc3add4 100644
--- a/chrome/browser/component_updater/test/test_configurator.cc
+++ b/chrome/browser/component_updater/test/test_configurator.cc
@@ -5,6 +5,7 @@
#include <string>
#include "base/run_loop.h"
+#include "base/version.h"
#include "chrome/browser/component_updater/test/test_configurator.h"
#include "content/public/browser/browser_thread.h"
#include "url/gurl.h"
@@ -66,6 +67,23 @@
return UpdateUrl();
}
+base::Version TestConfigurator::GetBrowserVersion() const {
+ // Needs to be larger than the required version in tested component manifests.
+ return base::Version("30.0");
+}
+
+std::string TestConfigurator::GetChannel() const {
+ return "fake_channel_string";
+}
+
+std::string TestConfigurator::GetLang() const {
+ return "fake_lang";
+}
+
+std::string TestConfigurator::GetOSLongName() const {
+ return "Fake Operating System";
+}
+
std::string TestConfigurator::ExtraRequestParams() const {
return "extra=\"foo\"";
}
diff --git a/chrome/browser/component_updater/test/test_configurator.h b/chrome/browser/component_updater/test/test_configurator.h
index 5e8121b0..bf7b868 100644
--- a/chrome/browser/component_updater/test/test_configurator.h
+++ b/chrome/browser/component_updater/test/test_configurator.h
@@ -37,6 +37,10 @@
virtual int OnDemandDelay() const OVERRIDE;
virtual GURL UpdateUrl() const OVERRIDE;
virtual GURL PingUrl() const OVERRIDE;
+ virtual base::Version GetBrowserVersion() const OVERRIDE;
+ virtual std::string GetChannel() const OVERRIDE;
+ virtual std::string GetLang() const OVERRIDE;
+ virtual std::string GetOSLongName() const OVERRIDE;
virtual std::string ExtraRequestParams() const OVERRIDE;
virtual size_t UrlSizeLimit() const OVERRIDE;
virtual net::URLRequestContextGetter* RequestContext() const OVERRIDE;
diff --git a/chrome/browser/component_updater/update_checker.cc b/chrome/browser/component_updater/update_checker.cc
index 2a03012..7fa828b 100644
--- a/chrome/browser/component_updater/update_checker.cc
+++ b/chrome/browser/component_updater/update_checker.cc
@@ -33,7 +33,8 @@
// <package fp="abcd" />
// </packages>
// </app>
-std::string BuildUpdateCheckRequest(const std::vector<CrxUpdateItem*>& items,
+std::string BuildUpdateCheckRequest(const Configurator& config,
+ const std::vector<CrxUpdateItem*>& items,
const std::string& additional_attributes) {
std::string app_elements;
for (size_t i = 0; i != items.size(); ++i) {
@@ -59,7 +60,12 @@
VLOG(1) << "Appending to update request: " << app;
}
- return BuildProtocolRequest(app_elements, additional_attributes);
+ return BuildProtocolRequest(config.GetBrowserVersion().GetString(),
+ config.GetChannel(),
+ config.GetLang(),
+ config.GetOSLongName(),
+ app_elements,
+ additional_attributes);
}
class UpdateCheckerImpl : public UpdateChecker, public net::URLFetcherDelegate {
@@ -114,7 +120,7 @@
url_fetcher_.reset(SendProtocolRequest(
config_.UpdateUrl(),
- BuildUpdateCheckRequest(items_to_check, additional_attributes),
+ BuildUpdateCheckRequest(config_, items_to_check, additional_attributes),
this,
config_.RequestContext()));