return base::Singleton<PersonalDataManagerFactoryEfl>::get();
}
-void PersonalDataManagerFactoryEfl::PersonalDataManagerAdd(
- content::BrowserContext* ctx) {
- DCHECK(ctx);
-
- if (ctx) {
- uint64_t uniqueId = reinterpret_cast<uint64_t>(ctx);
- PersonalDataManager* mgr = personal_data_manager_id_map_.Lookup(uniqueId);
- if (!mgr) {
- // TODO: LOCALE!
- PrefService* srv = user_prefs::UserPrefs::Get(ctx);
- CHECK(srv);
- auto* client = content::GetContentClientExport()->browser();
- mgr = new PersonalDataManager(client->GetApplicationLocale());
- mgr->Init(WebDataServiceFactoryEfl::GetAutofillWebDataForProfile(),
- nullptr, srv, nullptr,
- nullptr, // TODO(djmix.kim) : pass nullptr for bringup
- nullptr, // TODO(djmix.kim) : pass nullptr for bringup
- nullptr, // TODO(djmix.kim) : pass nullptr for bringup
- nullptr, // TODO(djmix.kim) : pass nullptr for bringup
- ctx->IsOffTheRecord());
- mgr->AddObserver(this);
- personal_data_manager_id_map_.AddWithID(mgr, uniqueId);
- }
- }
-}
-
void PersonalDataManagerFactoryEfl::PersonalDataManagerRemove(
- content::BrowserContext* ctx) {
- uint64_t uniqueId = reinterpret_cast<uint64_t>(ctx);
- personal_data_manager_id_map_.Remove(uniqueId);
+ content::BrowserContext* context) {
+ uint64_t unique_id = reinterpret_cast<uint64_t>(context);
+ PersonalDataManager* manager =
+ personal_data_manager_id_map_.Lookup(unique_id);
+ if (manager)
+ manager->RemoveObserver(this);
+
+ personal_data_manager_id_map_.Remove(unique_id);
}
PersonalDataManager*
PersonalDataManagerFactoryEfl::PersonalDataManagerForContext(
- content::BrowserContext* ctx) {
- uint64_t uniqueId = reinterpret_cast<uint64_t>(ctx);
- return personal_data_manager_id_map_.Lookup(uniqueId);
+ content::BrowserContext* context) {
+ if (!context)
+ return nullptr;
+
+ uint64_t unique_id = reinterpret_cast<uint64_t>(context);
+ PersonalDataManager* manager =
+ personal_data_manager_id_map_.Lookup(unique_id);
+ if (manager)
+ return manager;
+
+ PrefService* service = user_prefs::UserPrefs::Get(context);
+ if (!service) {
+ LOG(ERROR) << "Preference service is not set.";
+ return nullptr;
+ }
+
+ std::unique_ptr<PersonalDataManager> pdm(new PersonalDataManager(
+ content::GetContentClientExport()->browser()->GetApplicationLocale()));
+ manager = pdm.get();
+
+ manager->Init(WebDataServiceFactoryEfl::GetAutofillWebDataForProfile(), nullptr,
+ service, nullptr, nullptr, nullptr, nullptr, nullptr,
+ context->IsOffTheRecord());
+ manager->AddObserver(this);
+ personal_data_manager_id_map_.AddWithID(std::move(pdm), unique_id);
+
+ return manager;
}
PersonalDataManagerFactoryEfl::PersonalDataManagerFactoryEfl()
public:
static PersonalDataManagerFactoryEfl* GetInstance();
- void PersonalDataManagerAdd(content::BrowserContext* ctx);
void PersonalDataManagerRemove(content::BrowserContext* ctx);
PersonalDataManager* PersonalDataManagerForContext(
content::BrowserContext* ctx);
PersonalDataManagerFactoryEfl& operator=(
const PersonalDataManagerFactoryEfl&) = delete;
- base::IDMap<PersonalDataManager*> personal_data_manager_id_map_;
+ base::IDMap<std::unique_ptr<PersonalDataManager>>
+ personal_data_manager_id_map_;
Ewk_Context_Form_Autofill_Profile_Changed_Callback callback_;
void* callback_user_data_;