Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1321)

Unified Diff: chrome/browser/autofill/android/personal_data_manager_android.cc

Issue 2680143002: Use dropdown list for admin areas in pr form. (Closed)
Patch Set: wip Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/android/personal_data_manager_android.cc
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 3a5ad199fa1ab9d30acf74e136fa25c8d6858177..9751a917f3d5a5525514361b821f28da7fde5dbc 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -310,6 +310,40 @@ class AddressNormalizationRequester
DISALLOW_COPY_AND_ASSIGN(AddressNormalizationRequester);
};
+class GetSubKeysRequester : public PersonalDataManagerAndroid::Delegate,
+ public base::SupportsWeakPtr<GetSubKeysRequester> {
+ public:
+ GetSubKeysRequester(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jdelegate,
+ const std::string& region_code,
+ base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android) {
+ jdelegate_.Reset(env, jdelegate);
+ region_code_ = region_code;
+ personal_data_manager_android_ = personal_data_manager_android;
+ env_ = env;
+ }
+
+ private:
+ ~GetSubKeysRequester() override {}
+
+ void OnRulesSuccessfullyLoaded() override {
+ if (personal_data_manager_android_) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_GetSubKeysRequestDelegate_onSubKeysReceived(
+ env, jdelegate_,
+ personal_data_manager_android_->GetSubKeys(env, region_code_));
+ }
+ }
+
+ ScopedJavaGlobalRef<jobject> jdelegate_;
+ std::string region_code_;
+ base::WeakPtr<PersonalDataManagerAndroid> personal_data_manager_android_;
+ JNIEnv* env_;
+
+ DISALLOW_COPY_AND_ASSIGN(GetSubKeysRequester);
+};
+
} // namespace
PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, jobject obj)
@@ -792,6 +826,59 @@ void PersonalDataManagerAndroid::CancelPendingAddressNormalizations(
pending_normalization_.clear();
}
+base::android::ScopedJavaLocalRef<jobjectArray>
+PersonalDataManagerAndroid::GetSubKeys(JNIEnv* env,
+ const std::string& region_code) {
+ std::vector<std::string> sub_keys =
+ address_validator_.GetRegionSubKeys(region_code);
+ return base::android::ToJavaArrayOfStrings(env, sub_keys);
+}
+
+void PersonalDataManagerAndroid::OnGettingSubKeysRulesLoaded(
sebsg 2017/02/10 16:00:32 You probably don't need a second function here. Wh
Parastoo 2017/02/13 21:57:23 As discussed, we will keep the functions separated
+ const std::string& region_code,
+ bool success) {
+ // Check if there is any sub-key request.
+ auto it = pending_subkeys_request_.find(region_code);
+ if (it != pending_subkeys_request_.end()) {
+ for (size_t i = 0; i < it->second.size(); ++i) {
+ it->second[i]->OnRulesSuccessfullyLoaded();
+ }
+ pending_subkeys_request_.erase(it);
+ }
+}
+
+void PersonalDataManagerAndroid::StartGettingRegionSubKeys(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& unused_obj,
+ const JavaParamRef<jstring>& jregion_code,
+ const JavaParamRef<jobject>& jdelegate) {
+ const std::string region_code = ConvertJavaStringToUTF8(env, jregion_code);
+ std::unique_ptr<Delegate> requester(
+ new GetSubKeysRequester(env, jdelegate, region_code, AsWeakPtr()));
+
+ if (AreRulesLoadedForRegion(region_code)) {
+ requester->OnRulesSuccessfullyLoaded();
sebsg 2017/02/10 16:00:32 Since both RegionSubKeys and ValidationRules reque
Parastoo 2017/02/13 21:57:23 Same here.
+ } else {
+ // Setup the variables so that the sub-keys request is sent, when the rules
+ // are loaded.
+ auto it = pending_subkeys_request_.find(region_code);
+ if (it == pending_subkeys_request_.end()) {
+ // If no entry exists, create the entry and assign it to |it|.
+ it = pending_subkeys_request_
+ .insert(std::make_pair(region_code,
+ std::vector<std::unique_ptr<Delegate>>()))
+ .first;
+ }
+ it->second.push_back(std::move(requester));
+ }
+}
+
+void PersonalDataManagerAndroid::CancelPendingGetSubKeys(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& unused_obj) {
+ pending_subkeys_request_.clear();
+}
+
ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs(
JNIEnv* env,
const std::vector<AutofillProfile*>& profiles) {

Powered by Google App Engine
This is Rietveld 408576698