diff options
author | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-15 08:37:27 +0000 |
---|---|---|
committer | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-15 08:38:52 +0000 |
commit | 130e92a773ab408e79a7488af624a4c7984c775f (patch) | |
tree | 1d5d8fb95b88c617187fc5a3f66225f59c72bf67 /extensions/browser/updater | |
parent | 2cafa62dcb6e141d8718ceff848964a3cbb6edfe (diff) | |
download | chromium_src-130e92a773ab408e79a7488af624a4c7984c775f.zip chromium_src-130e92a773ab408e79a7488af624a4c7984c775f.tar.gz chromium_src-130e92a773ab408e79a7488af624a4c7984c775f.tar.bz2 |
Revert of Factor Chrome details out of update manifest fetching. (patchset #5 of https://codereview.chromium.org/465543004/)
Reason for revert:
Doesn't compile on all chromium.chrome buildbots (official).
Original issue's description:
> Factor Chrome details out of update manifest fetching.
>
> This establishes a ManifestFetchDataDelegate for use
> by ExtensionDownloader and ManifestFetchData, and moves
> ManifestFetchData into //extensions/browser/updater.
>
> The delegate provides implementation details for
> update manifest fetching, including brand code,
> boilerplate query parameters, and ping data.
>
> Chrome's implementation has knowledge of the
> Google brand, the metrics service, and Omaha-specific
> query parameters necessary for CRX item queries.
>
> BUG=398671
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=289800
TBR=kalman@chromium.org,isherman@chromium.org,rockot@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=398671
Review URL: https://codereview.chromium.org/476073002
Cr-Commit-Position: refs/heads/master@{#289821}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289821 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions/browser/updater')
-rw-r--r-- | extensions/browser/updater/manifest_fetch_data.cc | 165 | ||||
-rw-r--r-- | extensions/browser/updater/manifest_fetch_data.h | 128 |
2 files changed, 0 insertions, 293 deletions
diff --git a/extensions/browser/updater/manifest_fetch_data.cc b/extensions/browser/updater/manifest_fetch_data.cc deleted file mode 100644 index 1c38494..0000000 --- a/extensions/browser/updater/manifest_fetch_data.cc +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "extensions/browser/updater/manifest_fetch_data.h" - -#include <vector> - -#include "base/logging.h" -#include "base/metrics/histogram.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "base/strings/stringprintf.h" -#include "net/base/escape.h" - -namespace { - -// Maximum length of an extension manifest update check url, since it is a GET -// request. We want to stay under 2K because of proxies, etc. -const int kExtensionsManifestMaxURLSize = 2000; - -} // namespace - -namespace extensions { - -ManifestFetchData::ManifestFetchData(const GURL& update_url, - int request_id, - const std::string& brand_code, - const std::string& base_query_params, - PingMode ping_mode) - : base_url_(update_url), - full_url_(update_url), - brand_code_(brand_code), - ping_mode_(ping_mode) { - std::string query = - full_url_.has_query() ? full_url_.query() + "&" : std::string(); - query += base_query_params; - GURL::Replacements replacements; - replacements.SetQueryStr(query); - full_url_ = full_url_.ReplaceComponents(replacements); - - request_ids_.insert(request_id); -} - -ManifestFetchData::~ManifestFetchData() { -} - -// The format for request parameters in update checks is: -// -// ?x=EXT1_INFO&x=EXT2_INFO -// -// where EXT1_INFO and EXT2_INFO are url-encoded strings of the form: -// -// id=EXTENSION_ID&v=VERSION&uc -// -// Provide ping data with the parameter ping=PING_DATA where PING_DATA -// looks like r=DAYS or a=DAYS for extensions in the Chrome extensions gallery. -// ('r' refers to 'roll call' ie installation, and 'a' refers to 'active'). -// These values will each be present at most once every 24 hours, and indicate -// the number of days since the last time it was present in an update check. -// -// So for two extensions like: -// Extension 1- id:aaaa version:1.1 -// Extension 2- id:bbbb version:2.0 -// -// the full update url would be: -// http://somehost/path?x=id%3Daaaa%26v%3D1.1%26uc&x=id%3Dbbbb%26v%3D2.0%26uc -// -// (Note that '=' is %3D and '&' is %26 when urlencoded.) -bool ManifestFetchData::AddExtension(const std::string& id, - const std::string& version, - const PingData* ping_data, - const std::string& update_url_data, - const std::string& install_source) { - if (extension_ids_.find(id) != extension_ids_.end()) { - NOTREACHED() << "Duplicate extension id " << id; - return false; - } - - // Compute the string we'd append onto the full_url_, and see if it fits. - std::vector<std::string> parts; - parts.push_back("id=" + id); - parts.push_back("v=" + version); - if (!install_source.empty()) - parts.push_back("installsource=" + install_source); - parts.push_back("uc"); - - if (!update_url_data.empty()) { - // Make sure the update_url_data string is escaped before using it so that - // there is no chance of overriding the id or v other parameter value - // we place into the x= value. - parts.push_back("ap=" + net::EscapeQueryParamValue(update_url_data, true)); - } - - // Append brand code, rollcall and active ping parameters. - if (ping_mode_ != NO_PING) { - if (!brand_code_.empty()) - parts.push_back(base::StringPrintf("brand=%s", brand_code_.c_str())); - - std::string ping_value; - pings_[id] = PingData(0, 0, false); - if (ping_data) { - if (ping_data->rollcall_days == kNeverPinged || - ping_data->rollcall_days > 0) { - ping_value += "r=" + base::IntToString(ping_data->rollcall_days); - if (ping_mode_ == PING_WITH_METRICS) { - ping_value += "&e=" + std::string(ping_data->is_enabled ? "1" : "0"); - } - pings_[id].rollcall_days = ping_data->rollcall_days; - pings_[id].is_enabled = ping_data->is_enabled; - } - if (ping_data->active_days == kNeverPinged || - ping_data->active_days > 0) { - if (!ping_value.empty()) - ping_value += "&"; - ping_value += "a=" + base::IntToString(ping_data->active_days); - pings_[id].active_days = ping_data->active_days; - } - } - if (!ping_value.empty()) - parts.push_back("ping=" + net::EscapeQueryParamValue(ping_value, true)); - } - - std::string extra = full_url_.has_query() ? "&" : "?"; - extra += "x=" + net::EscapeQueryParamValue(JoinString(parts, '&'), true); - - // Check against our max url size, exempting the first extension added. - int new_size = full_url_.possibly_invalid_spec().size() + extra.size(); - if (!extension_ids_.empty() && new_size > kExtensionsManifestMaxURLSize) { - UMA_HISTOGRAM_PERCENTAGE("Extensions.UpdateCheckHitUrlSizeLimit", 1); - return false; - } - UMA_HISTOGRAM_PERCENTAGE("Extensions.UpdateCheckHitUrlSizeLimit", 0); - - // We have room so go ahead and add the extension. - extension_ids_.insert(id); - full_url_ = GURL(full_url_.possibly_invalid_spec() + extra); - return true; -} - -bool ManifestFetchData::Includes(const std::string& extension_id) const { - return extension_ids_.find(extension_id) != extension_ids_.end(); -} - -bool ManifestFetchData::DidPing(const std::string& extension_id, - PingType type) const { - std::map<std::string, PingData>::const_iterator i = pings_.find(extension_id); - if (i == pings_.end()) - return false; - int value = 0; - if (type == ROLLCALL) - value = i->second.rollcall_days; - else if (type == ACTIVE) - value = i->second.active_days; - else - NOTREACHED(); - return value == kNeverPinged || value > 0; -} - -void ManifestFetchData::Merge(const ManifestFetchData& other) { - DCHECK(full_url() == other.full_url()); - request_ids_.insert(other.request_ids_.begin(), other.request_ids_.end()); -} - -} // namespace extensions diff --git a/extensions/browser/updater/manifest_fetch_data.h b/extensions/browser/updater/manifest_fetch_data.h deleted file mode 100644 index 49f91b6..0000000 --- a/extensions/browser/updater/manifest_fetch_data.h +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXTENSIONS_BROWSER_UPDATER_MANIFEST_FETCH_DATA_H_ -#define EXTENSIONS_BROWSER_UPDATER_MANIFEST_FETCH_DATA_H_ - -#include <map> -#include <set> -#include <string> - -#include "base/basictypes.h" -#include "url/gurl.h" - -namespace extensions { - -// To save on server resources we can request updates for multiple extensions -// in one manifest check. This class helps us keep track of the id's for a -// given fetch, building up the actual URL, and what if anything to include -// in the ping parameter. -class ManifestFetchData { - public: - static const int kNeverPinged = -1; - - // What ping mode this fetch should use. - enum PingMode { - // No ping, no extra metrics. - NO_PING, - - // Ping without extra metrics. - PING, - - // Ping with extra metrics. - PING_WITH_METRICS, - }; - - // Each ping type is sent at most once per day. - enum PingType { - // Used for counting total installs of an extension/app/theme. - ROLLCALL, - - // Used for counting number of active users of an app, where "active" means - // the app was launched at least once since the last active ping. - ACTIVE, - }; - - struct PingData { - // The number of days it's been since our last rollcall or active ping, - // respectively. These are calculated based on the start of day from the - // server's perspective. - int rollcall_days; - int active_days; - // Wether the extension is enabled or not. - bool is_enabled; - - PingData() : rollcall_days(0), active_days(0), is_enabled(true) {} - PingData(int rollcall, int active, bool enabled) - : rollcall_days(rollcall), active_days(active), is_enabled(enabled) {} - }; - - ManifestFetchData(const GURL& update_url, - int request_id, - const std::string& brand_code, - const std::string& base_query_params, - PingMode ping_mode); - ~ManifestFetchData(); - - // Returns true if this extension information was successfully added. If the - // return value is false it means the full_url would have become too long, and - // this ManifestFetchData object remains unchanged. - bool AddExtension(const std::string& id, - const std::string& version, - const PingData* ping_data, - const std::string& update_url_data, - const std::string& install_source); - - const GURL& base_url() const { return base_url_; } - const GURL& full_url() const { return full_url_; } - const std::set<std::string>& extension_ids() const { return extension_ids_; } - const std::set<int>& request_ids() const { return request_ids_; } - - // Returns true if the given id is included in this manifest fetch. - bool Includes(const std::string& extension_id) const; - - // Returns true if a ping parameter for |type| was added to full_url for this - // extension id. - bool DidPing(const std::string& extension_id, PingType type) const; - - // Assuming that both this ManifestFetchData and |other| have the same - // full_url, this method merges the other information associated with the - // fetch (in particular this adds all request ids associated with |other| - // to this ManifestFetchData). - void Merge(const ManifestFetchData& other); - - private: - // The set of extension id's for this ManifestFetchData. - std::set<std::string> extension_ids_; - - // The set of ping data we actually sent. - std::map<std::string, PingData> pings_; - - // The base update url without any arguments added. - GURL base_url_; - - // The base update url plus arguments indicating the id, version, etc. - // information about each extension. - GURL full_url_; - - // The set of request ids associated with this manifest fetch. If multiple - // requests are trying to fetch the same manifest, they can be merged into - // one fetch, so potentially multiple request ids can get associated with - // one ManifestFetchData. - std::set<int> request_ids_; - - // The brand code to include with manifest fetch queries, if non-empty and - // |ping_mode_| >= PING. - const std::string brand_code_; - - // The ping mode for this fetch. This determines whether or not ping data - // (and possibly extra metrics) will be included in the fetch query. - const PingMode ping_mode_; - - DISALLOW_COPY_AND_ASSIGN(ManifestFetchData); -}; - -} // namespace extensions - -#endif // EXTENSIONS_BROWSER_UPDATER_MANIFEST_FETCH_DATA_H_ |