| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/profile_resetter/profile_resetter.h" | 5 #include "chrome/browser/profile_resetter/profile_resetter.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 } // namespace | 73 } // namespace |
| 74 #endif // defined(OS_WIN) | 74 #endif // defined(OS_WIN) |
| 75 | 75 |
| 76 ProfileResetter::ProfileResetter(Profile* profile) | 76 ProfileResetter::ProfileResetter(Profile* profile) |
| 77 : profile_(profile), | 77 : profile_(profile), |
| 78 template_url_service_(TemplateURLServiceFactory::GetForProfile(profile_)), | 78 template_url_service_(TemplateURLServiceFactory::GetForProfile(profile_)), |
| 79 pending_reset_flags_(0), | 79 pending_reset_flags_(0), |
| 80 cookies_remover_(nullptr), | 80 cookies_remover_(nullptr), |
| 81 weak_ptr_factory_(this) { | 81 weak_ptr_factory_(this) { |
| 82 DCHECK(CalledOnValidThread()); | 82 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 83 DCHECK(profile_); | 83 DCHECK(profile_); |
| 84 } | 84 } |
| 85 | 85 |
| 86 ProfileResetter::~ProfileResetter() { | 86 ProfileResetter::~ProfileResetter() { |
| 87 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 87 if (cookies_remover_) | 88 if (cookies_remover_) |
| 88 cookies_remover_->RemoveObserver(this); | 89 cookies_remover_->RemoveObserver(this); |
| 89 } | 90 } |
| 90 | 91 |
| 91 void ProfileResetter::Reset( | 92 void ProfileResetter::Reset( |
| 92 ProfileResetter::ResettableFlags resettable_flags, | 93 ProfileResetter::ResettableFlags resettable_flags, |
| 93 std::unique_ptr<BrandcodedDefaultSettings> master_settings, | 94 std::unique_ptr<BrandcodedDefaultSettings> master_settings, |
| 94 const base::Closure& callback) { | 95 const base::Closure& callback) { |
| 95 DCHECK(CalledOnValidThread()); | 96 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 96 DCHECK(master_settings); | 97 DCHECK(master_settings); |
| 97 | 98 |
| 98 // We should never be called with unknown flags. | 99 // We should never be called with unknown flags. |
| 99 CHECK_EQ(static_cast<ResettableFlags>(0), resettable_flags & ~ALL); | 100 CHECK_EQ(static_cast<ResettableFlags>(0), resettable_flags & ~ALL); |
| 100 | 101 |
| 101 // We should never be called when a previous reset has not finished. | 102 // We should never be called when a previous reset has not finished. |
| 102 CHECK_EQ(static_cast<ResettableFlags>(0), pending_reset_flags_); | 103 CHECK_EQ(static_cast<ResettableFlags>(0), pending_reset_flags_); |
| 103 | 104 |
| 104 if (!resettable_flags) { | 105 if (!resettable_flags) { |
| 105 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | 106 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 | 138 |
| 138 DCHECK_EQ(resettable_flags, reset_triggered_for_flags); | 139 DCHECK_EQ(resettable_flags, reset_triggered_for_flags); |
| 139 } | 140 } |
| 140 | 141 |
| 141 bool ProfileResetter::IsActive() const { | 142 bool ProfileResetter::IsActive() const { |
| 142 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 143 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 143 return pending_reset_flags_ != 0; | 144 return pending_reset_flags_ != 0; |
| 144 } | 145 } |
| 145 | 146 |
| 146 void ProfileResetter::MarkAsDone(Resettable resettable) { | 147 void ProfileResetter::MarkAsDone(Resettable resettable) { |
| 147 DCHECK(CalledOnValidThread()); | 148 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 148 | 149 |
| 149 // Check that we are never called twice or unexpectedly. | 150 // Check that we are never called twice or unexpectedly. |
| 150 CHECK(pending_reset_flags_ & resettable); | 151 CHECK(pending_reset_flags_ & resettable); |
| 151 | 152 |
| 152 pending_reset_flags_ &= ~resettable; | 153 pending_reset_flags_ &= ~resettable; |
| 153 | 154 |
| 154 if (!pending_reset_flags_) { | 155 if (!pending_reset_flags_) { |
| 155 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | 156 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| 156 callback_); | 157 callback_); |
| 157 callback_.Reset(); | 158 callback_.Reset(); |
| 158 master_settings_.reset(); | 159 master_settings_.reset(); |
| 159 template_url_service_sub_.reset(); | 160 template_url_service_sub_.reset(); |
| 160 } | 161 } |
| 161 } | 162 } |
| 162 | 163 |
| 163 void ProfileResetter::ResetDefaultSearchEngine() { | 164 void ProfileResetter::ResetDefaultSearchEngine() { |
| 164 DCHECK(CalledOnValidThread()); | 165 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 165 DCHECK(template_url_service_); | 166 DCHECK(template_url_service_); |
| 166 // If TemplateURLServiceFactory is ready we can clean it right now. | 167 // If TemplateURLServiceFactory is ready we can clean it right now. |
| 167 // Otherwise, load it and continue from ProfileResetter::Observe. | 168 // Otherwise, load it and continue from ProfileResetter::Observe. |
| 168 if (template_url_service_->loaded()) { | 169 if (template_url_service_->loaded()) { |
| 169 PrefService* prefs = profile_->GetPrefs(); | 170 PrefService* prefs = profile_->GetPrefs(); |
| 170 DCHECK(prefs); | 171 DCHECK(prefs); |
| 171 TemplateURLPrepopulateData::ClearPrepopulatedEnginesInPrefs( | 172 TemplateURLPrepopulateData::ClearPrepopulatedEnginesInPrefs( |
| 172 profile_->GetPrefs()); | 173 profile_->GetPrefs()); |
| 173 std::unique_ptr<base::ListValue> search_engines( | 174 std::unique_ptr<base::ListValue> search_engines( |
| 174 master_settings_->GetSearchProviderOverrides()); | 175 master_settings_->GetSearchProviderOverrides()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 185 } else { | 186 } else { |
| 186 template_url_service_sub_ = | 187 template_url_service_sub_ = |
| 187 template_url_service_->RegisterOnLoadedCallback( | 188 template_url_service_->RegisterOnLoadedCallback( |
| 188 base::Bind(&ProfileResetter::OnTemplateURLServiceLoaded, | 189 base::Bind(&ProfileResetter::OnTemplateURLServiceLoaded, |
| 189 weak_ptr_factory_.GetWeakPtr())); | 190 weak_ptr_factory_.GetWeakPtr())); |
| 190 template_url_service_->Load(); | 191 template_url_service_->Load(); |
| 191 } | 192 } |
| 192 } | 193 } |
| 193 | 194 |
| 194 void ProfileResetter::ResetHomepage() { | 195 void ProfileResetter::ResetHomepage() { |
| 195 DCHECK(CalledOnValidThread()); | 196 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 196 PrefService* prefs = profile_->GetPrefs(); | 197 PrefService* prefs = profile_->GetPrefs(); |
| 197 DCHECK(prefs); | 198 DCHECK(prefs); |
| 198 std::string homepage; | 199 std::string homepage; |
| 199 bool homepage_is_ntp, show_home_button; | 200 bool homepage_is_ntp, show_home_button; |
| 200 | 201 |
| 201 if (master_settings_->GetHomepage(&homepage)) | 202 if (master_settings_->GetHomepage(&homepage)) |
| 202 prefs->SetString(prefs::kHomePage, homepage); | 203 prefs->SetString(prefs::kHomePage, homepage); |
| 203 | 204 |
| 204 if (master_settings_->GetHomepageIsNewTab(&homepage_is_ntp)) | 205 if (master_settings_->GetHomepageIsNewTab(&homepage_is_ntp)) |
| 205 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, homepage_is_ntp); | 206 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, homepage_is_ntp); |
| 206 else | 207 else |
| 207 prefs->ClearPref(prefs::kHomePageIsNewTabPage); | 208 prefs->ClearPref(prefs::kHomePageIsNewTabPage); |
| 208 | 209 |
| 209 if (master_settings_->GetShowHomeButton(&show_home_button)) | 210 if (master_settings_->GetShowHomeButton(&show_home_button)) |
| 210 prefs->SetBoolean(prefs::kShowHomeButton, show_home_button); | 211 prefs->SetBoolean(prefs::kShowHomeButton, show_home_button); |
| 211 else | 212 else |
| 212 prefs->ClearPref(prefs::kShowHomeButton); | 213 prefs->ClearPref(prefs::kShowHomeButton); |
| 213 MarkAsDone(HOMEPAGE); | 214 MarkAsDone(HOMEPAGE); |
| 214 } | 215 } |
| 215 | 216 |
| 216 void ProfileResetter::ResetContentSettings() { | 217 void ProfileResetter::ResetContentSettings() { |
| 217 DCHECK(CalledOnValidThread()); | 218 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 218 HostContentSettingsMap* map = | 219 HostContentSettingsMap* map = |
| 219 HostContentSettingsMapFactory::GetForProfile(profile_); | 220 HostContentSettingsMapFactory::GetForProfile(profile_); |
| 220 | 221 |
| 221 for (const content_settings::WebsiteSettingsInfo* info : | 222 for (const content_settings::WebsiteSettingsInfo* info : |
| 222 *content_settings::WebsiteSettingsRegistry::GetInstance()) { | 223 *content_settings::WebsiteSettingsRegistry::GetInstance()) { |
| 223 map->ClearSettingsForOneType(info->type()); | 224 map->ClearSettingsForOneType(info->type()); |
| 224 } | 225 } |
| 225 | 226 |
| 226 // TODO(raymes): The default value isn't really used for website settings | 227 // TODO(raymes): The default value isn't really used for website settings |
| 227 // right now, but if it were we should probably reset that here too. | 228 // right now, but if it were we should probably reset that here too. |
| 228 for (const content_settings::ContentSettingsInfo* info : | 229 for (const content_settings::ContentSettingsInfo* info : |
| 229 *content_settings::ContentSettingsRegistry::GetInstance()) { | 230 *content_settings::ContentSettingsRegistry::GetInstance()) { |
| 230 map->SetDefaultContentSetting(info->website_settings_info()->type(), | 231 map->SetDefaultContentSetting(info->website_settings_info()->type(), |
| 231 CONTENT_SETTING_DEFAULT); | 232 CONTENT_SETTING_DEFAULT); |
| 232 } | 233 } |
| 233 MarkAsDone(CONTENT_SETTINGS); | 234 MarkAsDone(CONTENT_SETTINGS); |
| 234 } | 235 } |
| 235 | 236 |
| 236 void ProfileResetter::ResetCookiesAndSiteData() { | 237 void ProfileResetter::ResetCookiesAndSiteData() { |
| 237 DCHECK(CalledOnValidThread()); | 238 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 238 DCHECK(!cookies_remover_); | 239 DCHECK(!cookies_remover_); |
| 239 | 240 |
| 240 cookies_remover_ = content::BrowserContext::GetBrowsingDataRemover(profile_); | 241 cookies_remover_ = content::BrowserContext::GetBrowsingDataRemover(profile_); |
| 241 cookies_remover_->AddObserver(this); | 242 cookies_remover_->AddObserver(this); |
| 242 int remove_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA | | 243 int remove_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA | |
| 243 content::BrowsingDataRemover::DATA_TYPE_CACHE; | 244 content::BrowsingDataRemover::DATA_TYPE_CACHE; |
| 244 PrefService* prefs = profile_->GetPrefs(); | 245 PrefService* prefs = profile_->GetPrefs(); |
| 245 DCHECK(prefs); | 246 DCHECK(prefs); |
| 246 | 247 |
| 247 // Don't try to clear LSO data if it's not supported. | 248 // Don't try to clear LSO data if it's not supported. |
| 248 if (!prefs->GetBoolean(prefs::kClearPluginLSODataEnabled)) | 249 if (!prefs->GetBoolean(prefs::kClearPluginLSODataEnabled)) |
| 249 remove_mask &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; | 250 remove_mask &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; |
| 250 cookies_remover_->RemoveAndReply( | 251 cookies_remover_->RemoveAndReply( |
| 251 base::Time(), base::Time::Max(), remove_mask, | 252 base::Time(), base::Time::Max(), remove_mask, |
| 252 content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, this); | 253 content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, this); |
| 253 } | 254 } |
| 254 | 255 |
| 255 void ProfileResetter::ResetExtensions() { | 256 void ProfileResetter::ResetExtensions() { |
| 256 DCHECK(CalledOnValidThread()); | 257 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 257 | 258 |
| 258 std::vector<std::string> brandcode_extensions; | 259 std::vector<std::string> brandcode_extensions; |
| 259 master_settings_->GetExtensions(&brandcode_extensions); | 260 master_settings_->GetExtensions(&brandcode_extensions); |
| 260 | 261 |
| 261 ExtensionService* extension_service = | 262 ExtensionService* extension_service = |
| 262 extensions::ExtensionSystem::Get(profile_)->extension_service(); | 263 extensions::ExtensionSystem::Get(profile_)->extension_service(); |
| 263 DCHECK(extension_service); | 264 DCHECK(extension_service); |
| 264 extension_service->DisableUserExtensionsExcept(brandcode_extensions); | 265 extension_service->DisableUserExtensionsExcept(brandcode_extensions); |
| 265 | 266 |
| 266 // Reenable all disabled external component extensions. | 267 // Reenable all disabled external component extensions. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 278 extension_ids_to_reenable.push_back(extension->id()); | 279 extension_ids_to_reenable.push_back(extension->id()); |
| 279 } | 280 } |
| 280 for (const auto& extension_id : extension_ids_to_reenable) { | 281 for (const auto& extension_id : extension_ids_to_reenable) { |
| 281 extension_service->EnableExtension(extension_id); | 282 extension_service->EnableExtension(extension_id); |
| 282 } | 283 } |
| 283 | 284 |
| 284 MarkAsDone(EXTENSIONS); | 285 MarkAsDone(EXTENSIONS); |
| 285 } | 286 } |
| 286 | 287 |
| 287 void ProfileResetter::ResetStartupPages() { | 288 void ProfileResetter::ResetStartupPages() { |
| 288 DCHECK(CalledOnValidThread()); | 289 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 289 PrefService* prefs = profile_->GetPrefs(); | 290 PrefService* prefs = profile_->GetPrefs(); |
| 290 DCHECK(prefs); | 291 DCHECK(prefs); |
| 291 std::unique_ptr<base::ListValue> url_list( | 292 std::unique_ptr<base::ListValue> url_list( |
| 292 master_settings_->GetUrlsToRestoreOnStartup()); | 293 master_settings_->GetUrlsToRestoreOnStartup()); |
| 293 if (url_list) | 294 if (url_list) |
| 294 ListPrefUpdate(prefs, prefs::kURLsToRestoreOnStartup)->Swap(url_list.get()); | 295 ListPrefUpdate(prefs, prefs::kURLsToRestoreOnStartup)->Swap(url_list.get()); |
| 295 | 296 |
| 296 int restore_on_startup; | 297 int restore_on_startup; |
| 297 if (master_settings_->GetRestoreOnStartup(&restore_on_startup)) | 298 if (master_settings_->GetRestoreOnStartup(&restore_on_startup)) |
| 298 prefs->SetInteger(prefs::kRestoreOnStartup, restore_on_startup); | 299 prefs->SetInteger(prefs::kRestoreOnStartup, restore_on_startup); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 329 weak_ptr_factory_.GetWeakPtr(), | 330 weak_ptr_factory_.GetWeakPtr(), |
| 330 SHORTCUTS)); | 331 SHORTCUTS)); |
| 331 #else | 332 #else |
| 332 MarkAsDone(SHORTCUTS); | 333 MarkAsDone(SHORTCUTS); |
| 333 #endif | 334 #endif |
| 334 } | 335 } |
| 335 | 336 |
| 336 void ProfileResetter::OnTemplateURLServiceLoaded() { | 337 void ProfileResetter::OnTemplateURLServiceLoaded() { |
| 337 // TemplateURLService has loaded. If we need to clean search engines, it's | 338 // TemplateURLService has loaded. If we need to clean search engines, it's |
| 338 // time to go on. | 339 // time to go on. |
| 339 DCHECK(CalledOnValidThread()); | 340 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| 340 template_url_service_sub_.reset(); | 341 template_url_service_sub_.reset(); |
| 341 if (pending_reset_flags_ & DEFAULT_SEARCH_ENGINE) | 342 if (pending_reset_flags_ & DEFAULT_SEARCH_ENGINE) |
| 342 ResetDefaultSearchEngine(); | 343 ResetDefaultSearchEngine(); |
| 343 } | 344 } |
| 344 | 345 |
| 345 void ProfileResetter::OnBrowsingDataRemoverDone() { | 346 void ProfileResetter::OnBrowsingDataRemoverDone() { |
| 346 cookies_remover_->RemoveObserver(this); | 347 cookies_remover_->RemoveObserver(this); |
| 347 cookies_remover_ = nullptr; | 348 cookies_remover_ = nullptr; |
| 348 MarkAsDone(COOKIES_AND_SITE_DATA); | 349 MarkAsDone(COOKIES_AND_SITE_DATA); |
| 349 } | 350 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 369 chrome_exe, | 370 chrome_exe, |
| 370 false, | 371 false, |
| 371 cancel, | 372 cancel, |
| 372 &shortcuts); | 373 &shortcuts); |
| 373 } | 374 } |
| 374 return shortcuts; | 375 return shortcuts; |
| 375 #else | 376 #else |
| 376 return std::vector<ShortcutCommand>(); | 377 return std::vector<ShortcutCommand>(); |
| 377 #endif | 378 #endif |
| 378 } | 379 } |
| OLD | NEW |