Chromium Code Reviews| 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 "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
| 9 #include "chrome/browser/extensions/extension_system.h" | 9 #include "chrome/browser/extensions/extension_system.h" |
| 10 #include "chrome/browser/extensions/management_policy.h" | 10 #include "chrome/browser/extensions/management_policy.h" |
| 11 #include "chrome/browser/google/google_url_tracker.h" | 11 #include "chrome/browser/google/google_url_tracker.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" | 13 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
| 14 #include "chrome/browser/search_engines/template_url_service.h" | 14 #include "chrome/browser/search_engines/template_url_service.h" |
| 15 #include "chrome/browser/search_engines/template_url_service_factory.h" | 15 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 16 #include "chrome/browser/ui/browser.h" | |
| 17 #include "chrome/browser/ui/browser_iterator.h" | |
| 18 #include "chrome/browser/ui/tabs/tab_strip_model.h" | |
| 16 #include "chrome/common/chrome_notification_types.h" | 19 #include "chrome/common/chrome_notification_types.h" |
| 17 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
| 18 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
| 19 #include "content/public/browser/notification_source.h" | 22 #include "content/public/browser/notification_source.h" |
| 20 | 23 |
| 21 ProfileResetter::ProfileResetter(Profile* profile) | 24 ProfileResetter::ProfileResetter(Profile* profile) |
| 22 : profile_(profile), | 25 : profile_(profile), |
| 23 template_url_service_(TemplateURLServiceFactory::GetForProfile(profile_)), | 26 template_url_service_(TemplateURLServiceFactory::GetForProfile(profile_)), |
| 24 pending_reset_flags_(0) { | 27 pending_reset_flags_(0) { |
| 25 DCHECK(CalledOnValidThread()); | 28 DCHECK(CalledOnValidThread()); |
| 26 DCHECK(profile_); | 29 DCHECK(profile_); |
| 27 registrar_.Add(this, chrome::NOTIFICATION_TEMPLATE_URL_SERVICE_LOADED, | 30 registrar_.Add(this, chrome::NOTIFICATION_TEMPLATE_URL_SERVICE_LOADED, |
| 28 content::Source<TemplateURLService>(template_url_service_)); | 31 content::Source<TemplateURLService>(template_url_service_)); |
| 29 } | 32 } |
| 30 | 33 |
| 31 ProfileResetter::~ProfileResetter() {} | 34 ProfileResetter::~ProfileResetter() {} |
| 32 | 35 |
| 33 void ProfileResetter::Reset(ProfileResetter::ResettableFlags resettable_flags, | 36 void ProfileResetter::Reset(ProfileResetter::ResettableFlags resettable_flags, |
| 34 ExtensionHandling extension_handling, | |
| 35 const base::Closure& callback) { | 37 const base::Closure& callback) { |
| 36 DCHECK(CalledOnValidThread()); | 38 DCHECK(CalledOnValidThread()); |
| 37 | 39 |
| 38 // We should never be called with unknown flags. | 40 // We should never be called with unknown flags. |
| 39 CHECK_EQ(static_cast<ResettableFlags>(0), resettable_flags & ~ALL); | 41 CHECK_EQ(static_cast<ResettableFlags>(0), resettable_flags & ~ALL); |
| 40 | 42 |
| 41 // We should never be called when a previous reset has not finished. | 43 // We should never be called when a previous reset has not finished. |
| 42 CHECK_EQ(static_cast<ResettableFlags>(0), pending_reset_flags_); | 44 CHECK_EQ(static_cast<ResettableFlags>(0), pending_reset_flags_); |
| 43 | 45 |
| 44 callback_ = callback; | 46 callback_ = callback; |
| 45 | 47 |
| 46 // These flags are set to false by the individual reset functions. | 48 // These flags are set to false by the individual reset functions. |
| 47 pending_reset_flags_ = resettable_flags; | 49 pending_reset_flags_ = resettable_flags; |
| 48 | 50 |
| 51 struct { | |
| 52 Resettable flag; | |
| 53 void (ProfileResetter::*method)(); | |
| 54 } flag2Method [] = { | |
| 55 { DEFAULT_SEARCH_ENGINE, &ProfileResetter::ResetDefaultSearchEngine }, | |
| 56 { HOMEPAGE, &ProfileResetter::ResetHomepage }, | |
| 57 { CONTENT_SETTINGS, &ProfileResetter::ResetContentSettings }, | |
| 58 { COOKIES_AND_SITE_DATA, &ProfileResetter::ResetCookiesAndSiteData }, | |
| 59 { EXTENSIONS, &ProfileResetter::ResetExtensions }, | |
| 60 { STARTUP_PAGES, &ProfileResetter::ResetStartPage }, | |
|
battre
2013/06/14 17:51:21
want to rename this to ResetStartupPages?
vasilii
2013/06/17 11:56:30
Done.
| |
| 61 { PINNED_TABS, &ProfileResetter::ResetPinnedTabs }, | |
| 62 }; | |
| 63 | |
| 49 ResettableFlags reset_triggered_for_flags = 0; | 64 ResettableFlags reset_triggered_for_flags = 0; |
| 50 | 65 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(flag2Method); ++i) { |
| 51 if (resettable_flags & DEFAULT_SEARCH_ENGINE) { | 66 if (resettable_flags & flag2Method[i].flag) { |
| 52 reset_triggered_for_flags |= DEFAULT_SEARCH_ENGINE; | 67 reset_triggered_for_flags |= flag2Method[i].flag; |
| 53 ResetDefaultSearchEngine(); | 68 (this->*flag2Method[i].method)(); |
| 54 } | 69 } |
| 55 | |
| 56 if (resettable_flags & HOMEPAGE) { | |
| 57 reset_triggered_for_flags |= HOMEPAGE; | |
| 58 ResetHomepage(); | |
| 59 } | |
| 60 | |
| 61 if (resettable_flags & CONTENT_SETTINGS) { | |
| 62 reset_triggered_for_flags |= CONTENT_SETTINGS; | |
| 63 ResetContentSettings(); | |
| 64 } | |
| 65 | |
| 66 if (resettable_flags & COOKIES_AND_SITE_DATA) { | |
| 67 reset_triggered_for_flags |= COOKIES_AND_SITE_DATA; | |
| 68 ResetCookiesAndSiteData(); | |
| 69 } | |
| 70 | |
| 71 if (resettable_flags & EXTENSIONS) { | |
| 72 reset_triggered_for_flags |= EXTENSIONS; | |
| 73 ResetExtensions(extension_handling); | |
| 74 } | |
| 75 | |
| 76 if (resettable_flags & STARTUP_PAGE) { | |
| 77 reset_triggered_for_flags |= STARTUP_PAGE; | |
| 78 ResetStartPage(); | |
| 79 } | 70 } |
| 80 | 71 |
| 81 DCHECK_EQ(resettable_flags, reset_triggered_for_flags); | 72 DCHECK_EQ(resettable_flags, reset_triggered_for_flags); |
| 82 } | 73 } |
| 83 | 74 |
| 84 bool ProfileResetter::IsActive() const { | 75 bool ProfileResetter::IsActive() const { |
| 85 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 76 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 86 return pending_reset_flags_ != 0; | 77 return pending_reset_flags_ != 0; |
| 87 } | 78 } |
| 88 | 79 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 MarkAsDone(CONTENT_SETTINGS); | 135 MarkAsDone(CONTENT_SETTINGS); |
| 145 } | 136 } |
| 146 | 137 |
| 147 void ProfileResetter::ResetCookiesAndSiteData() { | 138 void ProfileResetter::ResetCookiesAndSiteData() { |
| 148 DCHECK(CalledOnValidThread()); | 139 DCHECK(CalledOnValidThread()); |
| 149 NOTIMPLEMENTED(); | 140 NOTIMPLEMENTED(); |
| 150 // TODO(battre/vabr): Implement | 141 // TODO(battre/vabr): Implement |
| 151 MarkAsDone(COOKIES_AND_SITE_DATA); | 142 MarkAsDone(COOKIES_AND_SITE_DATA); |
| 152 } | 143 } |
| 153 | 144 |
| 154 void ProfileResetter::ResetExtensions(ExtensionHandling extension_handling) { | 145 void ProfileResetter::ResetExtensions() { |
| 155 DCHECK(CalledOnValidThread()); | 146 DCHECK(CalledOnValidThread()); |
| 156 ExtensionService* extension_service = profile_->GetExtensionService(); | 147 ExtensionService* extension_service = profile_->GetExtensionService(); |
| 157 DCHECK(extension_service); | 148 DCHECK(extension_service); |
| 158 extension_service->DisableUserExtensions(); | 149 extension_service->DisableUserExtensions(); |
| 159 | 150 |
| 160 MarkAsDone(EXTENSIONS); | 151 MarkAsDone(EXTENSIONS); |
| 161 } | 152 } |
| 162 | 153 |
| 163 void ProfileResetter::ResetStartPage() { | 154 void ProfileResetter::ResetStartPage() { |
| 164 DCHECK(CalledOnValidThread()); | 155 DCHECK(CalledOnValidThread()); |
| 165 PrefService* prefs = profile_->GetPrefs(); | 156 PrefService* prefs = profile_->GetPrefs(); |
| 166 DCHECK(prefs); | 157 DCHECK(prefs); |
| 167 prefs->ClearPref(prefs::kRestoreOnStartup); | 158 prefs->ClearPref(prefs::kRestoreOnStartup); |
| 168 prefs->ClearPref(prefs::kURLsToRestoreOnStartup); | 159 prefs->ClearPref(prefs::kURLsToRestoreOnStartup); |
| 169 prefs->SetBoolean(prefs::kRestoreOnStartupMigrated, true); | 160 prefs->SetBoolean(prefs::kRestoreOnStartupMigrated, true); |
| 170 MarkAsDone(STARTUP_PAGE); | 161 MarkAsDone(STARTUP_PAGES); |
| 162 } | |
| 163 | |
| 164 void ProfileResetter::ResetPinnedTabs() { | |
| 165 // Unpin all the tabs. | |
| 166 for (chrome::BrowserIterator it; !it.done(); it.Next()) { | |
| 167 if (it->is_type_tabbed() && it->profile() == profile_) { | |
| 168 TabStripModel* tab_model = it->tab_strip_model(); | |
| 169 // Here we assume that indexof(any mini tab) < indexof(any normal tab). | |
| 170 // If we unpin the tab, it can be moved to the right. Thus traversing in | |
| 171 // reverse direction is correct. | |
| 172 for (int i = tab_model->count() - 1; i >= 0; --i) { | |
| 173 if (tab_model->IsTabPinned(i) && !tab_model->IsAppTab(i)) | |
| 174 tab_model->SetTabPinned(i, false); | |
| 175 } | |
| 176 } | |
| 177 } | |
| 178 MarkAsDone(PINNED_TABS); | |
| 171 } | 179 } |
| 172 | 180 |
| 173 void ProfileResetter::Observe(int type, | 181 void ProfileResetter::Observe(int type, |
| 174 const content::NotificationSource& source, | 182 const content::NotificationSource& source, |
| 175 const content::NotificationDetails& details) { | 183 const content::NotificationDetails& details) { |
| 176 DCHECK(CalledOnValidThread()); | 184 DCHECK(CalledOnValidThread()); |
| 177 // TemplateURLService has loaded. If we need to clean search engines, it's | 185 // TemplateURLService has loaded. If we need to clean search engines, it's |
| 178 // time to go on. | 186 // time to go on. |
| 179 if (pending_reset_flags_ & DEFAULT_SEARCH_ENGINE) | 187 if (pending_reset_flags_ & DEFAULT_SEARCH_ENGINE) |
| 180 ResetDefaultSearchEngine(); | 188 ResetDefaultSearchEngine(); |
| 181 } | 189 } |
| OLD | NEW |