| Index: chrome/browser/android/data_usage/external_data_use_observer.cc
|
| diff --git a/chrome/browser/android/data_usage/external_data_use_observer.cc b/chrome/browser/android/data_usage/external_data_use_observer.cc
|
| index 07fbe9d416ade9048ae154f808bd5df4a48fab15..954629696578af10bfe2d746b6a12e13c29762fd 100644
|
| --- a/chrome/browser/android/data_usage/external_data_use_observer.cc
|
| +++ b/chrome/browser/android/data_usage/external_data_use_observer.cc
|
| @@ -139,7 +139,7 @@ void ExternalDataUseObserver::FetchMatchingRulesOnUIThread() const {
|
| env, j_external_data_use_observer_.obj());
|
| }
|
|
|
| -void ExternalDataUseObserver::FetchMatchingRulesCallback(
|
| +void ExternalDataUseObserver::FetchMatchingRulesDone(
|
| JNIEnv* env,
|
| jobject obj,
|
| const base::android::JavaParamRef<jobjectArray>& app_package_name,
|
| @@ -162,12 +162,12 @@ void ExternalDataUseObserver::FetchMatchingRulesCallback(
|
|
|
| io_task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ExternalDataUseObserver::FetchMatchingRulesCallbackOnIOThread,
|
| + base::Bind(&ExternalDataUseObserver::FetchMatchingRulesDoneOnIOThread,
|
| GetIOWeakPtr(), app_package_name_native,
|
| domain_path_regex_native, label_native));
|
| }
|
|
|
| -void ExternalDataUseObserver::FetchMatchingRulesCallbackOnIOThread(
|
| +void ExternalDataUseObserver::FetchMatchingRulesDoneOnIOThread(
|
| const std::vector<std::string>& app_package_name,
|
| const std::vector<std::string>& domain_path_regex,
|
| const std::vector<std::string>& label) {
|
| @@ -386,6 +386,45 @@ bool ExternalDataUseObserver::Matches(const GURL& gurl,
|
| return false;
|
| }
|
|
|
| +ExternalDataUseObserver::DataUseReportKey::DataUseReportKey(
|
| + const std::string& label,
|
| + net::NetworkChangeNotifier::ConnectionType connection_type,
|
| + const std::string& mcc_mnc)
|
| + : label(label), connection_type(connection_type), mcc_mnc(mcc_mnc) {}
|
| +
|
| +bool ExternalDataUseObserver::DataUseReportKey::operator==(
|
| + const DataUseReportKey& other) const {
|
| + return label == other.label && connection_type == other.connection_type &&
|
| + mcc_mnc == other.mcc_mnc;
|
| +}
|
| +
|
| +ExternalDataUseObserver::DataUseReport::DataUseReport(
|
| + const base::Time& start_time,
|
| + const base::Time& end_time,
|
| + int64_t bytes_downloaded,
|
| + int64_t bytes_uploaded)
|
| + : start_time(start_time),
|
| + end_time(end_time),
|
| + bytes_downloaded(bytes_downloaded),
|
| + bytes_uploaded(bytes_uploaded) {}
|
| +
|
| +size_t ExternalDataUseObserver::DataUseReportKeyHash::operator()(
|
| + const DataUseReportKey& k) const {
|
| + // The hash is computed by hashing individual variables and combining them
|
| + // using prime numbers. Prime numbers are used for multiplication because the
|
| + // number of buckets used by map is always an even number. Using a prime
|
| + // number ensures that for two different DataUseReportKey objects (say |j|
|
| + // and |k|), if the hash value of |k.label| is equal to hash value of
|
| + // |j.mcc_mnc|, then |j| and |k| map to different buckets. Large prime
|
| + // numbers are used so that hash value is spread over a larger range.
|
| + std::hash<std::string> hash_function;
|
| + size_t hash = 1;
|
| + hash = hash * 23 + hash_function(k.label);
|
| + hash = hash * 43 + k.connection_type;
|
| + hash = hash * 83 + hash_function(k.mcc_mnc);
|
| + return hash;
|
| +}
|
| +
|
| ExternalDataUseObserver::MatchingRule::MatchingRule(
|
| const std::string& app_package_name,
|
| scoped_ptr<re2::RE2> pattern,
|
|
|