Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/data_usage/external_data_use_observer.h" | 5 #include "chrome/browser/android/data_usage/external_data_use_observer.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 } | 128 } |
| 129 | 129 |
| 130 void ExternalDataUseObserver::FetchMatchingRulesOnUIThread() const { | 130 void ExternalDataUseObserver::FetchMatchingRulesOnUIThread() const { |
| 131 DCHECK(ui_task_runner_->BelongsToCurrentThread()); | 131 DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
| 132 DCHECK(!j_external_data_use_observer_.is_null()); | 132 DCHECK(!j_external_data_use_observer_.is_null()); |
| 133 JNIEnv* env = base::android::AttachCurrentThread(); | 133 JNIEnv* env = base::android::AttachCurrentThread(); |
| 134 Java_ExternalDataUseObserver_fetchMatchingRules( | 134 Java_ExternalDataUseObserver_fetchMatchingRules( |
| 135 env, j_external_data_use_observer_.obj()); | 135 env, j_external_data_use_observer_.obj()); |
| 136 } | 136 } |
| 137 | 137 |
| 138 void ExternalDataUseObserver::FetchMatchingRulesCallback( | 138 void ExternalDataUseObserver::FetchMatchingRulesDone( |
| 139 JNIEnv* env, | 139 JNIEnv* env, |
| 140 jobject obj, | 140 jobject obj, |
| 141 const base::android::JavaParamRef<jobjectArray>& app_package_name, | 141 const base::android::JavaParamRef<jobjectArray>& app_package_name, |
| 142 const base::android::JavaParamRef<jobjectArray>& domain_path_regex, | 142 const base::android::JavaParamRef<jobjectArray>& domain_path_regex, |
| 143 const base::android::JavaParamRef<jobjectArray>& label) { | 143 const base::android::JavaParamRef<jobjectArray>& label) { |
| 144 DCHECK(ui_task_runner_->BelongsToCurrentThread()); | 144 DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
| 145 // Convert to native objects. | 145 // Convert to native objects. |
| 146 std::vector<std::string> app_package_name_native; | 146 std::vector<std::string> app_package_name_native; |
| 147 std::vector<std::string> domain_path_regex_native; | 147 std::vector<std::string> domain_path_regex_native; |
| 148 std::vector<std::string> label_native; | 148 std::vector<std::string> label_native; |
| 149 | 149 |
| 150 if (app_package_name && domain_path_regex && label) { | 150 if (app_package_name && domain_path_regex && label) { |
| 151 base::android::AppendJavaStringArrayToStringVector( | 151 base::android::AppendJavaStringArrayToStringVector( |
| 152 env, app_package_name, &app_package_name_native); | 152 env, app_package_name, &app_package_name_native); |
| 153 base::android::AppendJavaStringArrayToStringVector( | 153 base::android::AppendJavaStringArrayToStringVector( |
| 154 env, domain_path_regex, &domain_path_regex_native); | 154 env, domain_path_regex, &domain_path_regex_native); |
| 155 base::android::AppendJavaStringArrayToStringVector(env, label, | 155 base::android::AppendJavaStringArrayToStringVector(env, label, |
| 156 &label_native); | 156 &label_native); |
| 157 } | 157 } |
| 158 | 158 |
| 159 io_task_runner_->PostTask( | 159 io_task_runner_->PostTask( |
| 160 FROM_HERE, | 160 FROM_HERE, |
| 161 base::Bind(&ExternalDataUseObserver::FetchMatchingRulesCallbackOnIOThread, | 161 base::Bind(&ExternalDataUseObserver::FetchMatchingRulesDoneOnIOThread, |
| 162 GetIOWeakPtr(), app_package_name_native, | 162 GetIOWeakPtr(), app_package_name_native, |
| 163 domain_path_regex_native, label_native)); | 163 domain_path_regex_native, label_native)); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void ExternalDataUseObserver::FetchMatchingRulesCallbackOnIOThread( | 166 void ExternalDataUseObserver::FetchMatchingRulesDoneOnIOThread( |
| 167 const std::vector<std::string>& app_package_name, | 167 const std::vector<std::string>& app_package_name, |
| 168 const std::vector<std::string>& domain_path_regex, | 168 const std::vector<std::string>& domain_path_regex, |
| 169 const std::vector<std::string>& label) { | 169 const std::vector<std::string>& label) { |
| 170 DCHECK(thread_checker_.CalledOnValidThread()); | 170 DCHECK(thread_checker_.CalledOnValidThread()); |
| 171 | 171 |
| 172 RegisterURLRegexes(app_package_name, domain_path_regex, label); | 172 RegisterURLRegexes(app_package_name, domain_path_regex, label); |
| 173 matching_rules_fetch_pending_ = false; | 173 matching_rules_fetch_pending_ = false; |
| 174 // Process buffered reports. | 174 // Process buffered reports. |
| 175 } | 175 } |
| 176 | 176 |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 const re2::RE2* pattern = matching_rules_[i]->pattern(); | 375 const re2::RE2* pattern = matching_rules_[i]->pattern(); |
| 376 if (re2::RE2::FullMatch(gurl.spec(), *pattern)) { | 376 if (re2::RE2::FullMatch(gurl.spec(), *pattern)) { |
| 377 *label = matching_rules_[i]->label(); | 377 *label = matching_rules_[i]->label(); |
| 378 return true; | 378 return true; |
| 379 } | 379 } |
| 380 } | 380 } |
| 381 | 381 |
| 382 return false; | 382 return false; |
| 383 } | 383 } |
| 384 | 384 |
| 385 ExternalDataUseObserver::DataUseReportKey::DataUseReportKey( | |
| 386 const std::string& label, | |
| 387 net::NetworkChangeNotifier::ConnectionType connection_type, | |
| 388 const std::string& mcc_mnc) | |
| 389 : label(label), connection_type(connection_type), mcc_mnc(mcc_mnc) {} | |
| 390 | |
| 391 ExternalDataUseObserver::DataUseReportKey::~DataUseReportKey() {} | |
| 392 | |
| 393 bool ExternalDataUseObserver::DataUseReportKey::operator==( | |
| 394 const DataUseReportKey& other) const { | |
| 395 return (label == other.label && connection_type == other.connection_type && | |
|
sclittle
2015/11/10 19:21:57
optional nit: parentheses aren't necessary here.
tbansal1
2015/11/11 21:18:38
Done.
| |
| 396 mcc_mnc == other.mcc_mnc); | |
| 397 } | |
| 398 | |
| 399 ExternalDataUseObserver::DataUseReport::DataUseReport( | |
| 400 const base::Time& start_time, | |
| 401 const base::Time& end_time, | |
| 402 int64_t bytes_downloaded, | |
| 403 int64_t bytes_uploaded) | |
| 404 : start_time(start_time), | |
| 405 end_time(end_time), | |
| 406 bytes_downloaded(bytes_downloaded), | |
| 407 bytes_uploaded(bytes_uploaded) {} | |
| 408 | |
| 409 ExternalDataUseObserver::DataUseReport::~DataUseReport() {} | |
| 410 | |
| 411 size_t ExternalDataUseObserver::DataUseReportKeyHash::operator()( | |
| 412 const DataUseReportKey& k) const { | |
| 413 std::hash<std::string> hash_function; | |
| 414 size_t hash = 1; | |
| 415 hash = hash * 23 + hash_function(k.label); | |
| 416 hash = hash * 43 + k.connection_type; | |
| 417 hash = hash * 83 + hash_function(k.mcc_mnc); | |
| 418 return hash; | |
| 419 } | |
| 420 | |
| 385 ExternalDataUseObserver::MatchingRule::MatchingRule( | 421 ExternalDataUseObserver::MatchingRule::MatchingRule( |
| 386 const std::string& app_package_name, | 422 const std::string& app_package_name, |
| 387 scoped_ptr<re2::RE2> pattern, | 423 scoped_ptr<re2::RE2> pattern, |
| 388 const std::string& label) | 424 const std::string& label) |
| 389 : app_package_name_(app_package_name), | 425 : app_package_name_(app_package_name), |
| 390 pattern_(pattern.Pass()), | 426 pattern_(pattern.Pass()), |
| 391 label_(label) {} | 427 label_(label) {} |
| 392 | 428 |
| 393 ExternalDataUseObserver::MatchingRule::~MatchingRule() {} | 429 ExternalDataUseObserver::MatchingRule::~MatchingRule() {} |
| 394 | 430 |
| 395 const re2::RE2* ExternalDataUseObserver::MatchingRule::pattern() const { | 431 const re2::RE2* ExternalDataUseObserver::MatchingRule::pattern() const { |
| 396 return pattern_.get(); | 432 return pattern_.get(); |
| 397 } | 433 } |
| 398 | 434 |
| 399 const std::string& ExternalDataUseObserver::MatchingRule::label() const { | 435 const std::string& ExternalDataUseObserver::MatchingRule::label() const { |
| 400 return label_; | 436 return label_; |
| 401 } | 437 } |
| 402 | 438 |
| 403 bool RegisterExternalDataUseObserver(JNIEnv* env) { | 439 bool RegisterExternalDataUseObserver(JNIEnv* env) { |
| 404 return RegisterNativesImpl(env); | 440 return RegisterNativesImpl(env); |
| 405 } | 441 } |
| 406 | 442 |
| 407 } // namespace android | 443 } // namespace android |
| 408 | 444 |
| 409 } // namespace chrome | 445 } // namespace chrome |
| OLD | NEW |