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 |