Chromium Code Reviews| Index: chrome/browser/profile_resetter/profile_resetter.cc |
| diff --git a/chrome/browser/profile_resetter/profile_resetter.cc b/chrome/browser/profile_resetter/profile_resetter.cc |
| index 579bc4510fe007a037d12a9069643c0c8dda9b46..b513926d4e61d5ba9f87c0cdaec1f7b72302dd85 100644 |
| --- a/chrome/browser/profile_resetter/profile_resetter.cc |
| +++ b/chrome/browser/profile_resetter/profile_resetter.cc |
| @@ -13,6 +13,9 @@ |
| #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
| #include "chrome/browser/search_engines/template_url_service.h" |
| #include "chrome/browser/search_engines/template_url_service_factory.h" |
| +#include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/browser_iterator.h" |
| +#include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/pref_names.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -31,7 +34,6 @@ ProfileResetter::ProfileResetter(Profile* profile) |
| ProfileResetter::~ProfileResetter() {} |
| void ProfileResetter::Reset(ProfileResetter::ResettableFlags resettable_flags, |
| - ExtensionHandling extension_handling, |
| const base::Closure& callback) { |
| DCHECK(CalledOnValidThread()); |
| @@ -46,36 +48,25 @@ void ProfileResetter::Reset(ProfileResetter::ResettableFlags resettable_flags, |
| // These flags are set to false by the individual reset functions. |
| pending_reset_flags_ = resettable_flags; |
| - ResettableFlags reset_triggered_for_flags = 0; |
| - |
| - if (resettable_flags & DEFAULT_SEARCH_ENGINE) { |
| - reset_triggered_for_flags |= DEFAULT_SEARCH_ENGINE; |
| - ResetDefaultSearchEngine(); |
| - } |
| - |
| - if (resettable_flags & HOMEPAGE) { |
| - reset_triggered_for_flags |= HOMEPAGE; |
| - ResetHomepage(); |
| - } |
| - |
| - if (resettable_flags & CONTENT_SETTINGS) { |
| - reset_triggered_for_flags |= CONTENT_SETTINGS; |
| - ResetContentSettings(); |
| - } |
| + struct { |
| + Resettable flag; |
| + void (ProfileResetter::*method)(); |
| + } flag2Method [] = { |
| + { DEFAULT_SEARCH_ENGINE, &ProfileResetter::ResetDefaultSearchEngine }, |
| + { HOMEPAGE, &ProfileResetter::ResetHomepage }, |
| + { CONTENT_SETTINGS, &ProfileResetter::ResetContentSettings }, |
| + { COOKIES_AND_SITE_DATA, &ProfileResetter::ResetCookiesAndSiteData }, |
| + { EXTENSIONS, &ProfileResetter::ResetExtensions }, |
| + { 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.
|
| + { PINNED_TABS, &ProfileResetter::ResetPinnedTabs }, |
| + }; |
| - if (resettable_flags & COOKIES_AND_SITE_DATA) { |
| - reset_triggered_for_flags |= COOKIES_AND_SITE_DATA; |
| - ResetCookiesAndSiteData(); |
| - } |
| - |
| - if (resettable_flags & EXTENSIONS) { |
| - reset_triggered_for_flags |= EXTENSIONS; |
| - ResetExtensions(extension_handling); |
| - } |
| - |
| - if (resettable_flags & STARTUP_PAGE) { |
| - reset_triggered_for_flags |= STARTUP_PAGE; |
| - ResetStartPage(); |
| + ResettableFlags reset_triggered_for_flags = 0; |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(flag2Method); ++i) { |
| + if (resettable_flags & flag2Method[i].flag) { |
| + reset_triggered_for_flags |= flag2Method[i].flag; |
| + (this->*flag2Method[i].method)(); |
| + } |
| } |
| DCHECK_EQ(resettable_flags, reset_triggered_for_flags); |
| @@ -151,7 +142,7 @@ void ProfileResetter::ResetCookiesAndSiteData() { |
| MarkAsDone(COOKIES_AND_SITE_DATA); |
| } |
| -void ProfileResetter::ResetExtensions(ExtensionHandling extension_handling) { |
| +void ProfileResetter::ResetExtensions() { |
| DCHECK(CalledOnValidThread()); |
| ExtensionService* extension_service = profile_->GetExtensionService(); |
| DCHECK(extension_service); |
| @@ -167,7 +158,24 @@ void ProfileResetter::ResetStartPage() { |
| prefs->ClearPref(prefs::kRestoreOnStartup); |
| prefs->ClearPref(prefs::kURLsToRestoreOnStartup); |
| prefs->SetBoolean(prefs::kRestoreOnStartupMigrated, true); |
| - MarkAsDone(STARTUP_PAGE); |
| + MarkAsDone(STARTUP_PAGES); |
| +} |
| + |
| +void ProfileResetter::ResetPinnedTabs() { |
| + // Unpin all the tabs. |
| + for (chrome::BrowserIterator it; !it.done(); it.Next()) { |
| + if (it->is_type_tabbed() && it->profile() == profile_) { |
| + TabStripModel* tab_model = it->tab_strip_model(); |
| + // Here we assume that indexof(any mini tab) < indexof(any normal tab). |
| + // If we unpin the tab, it can be moved to the right. Thus traversing in |
| + // reverse direction is correct. |
| + for (int i = tab_model->count() - 1; i >= 0; --i) { |
| + if (tab_model->IsTabPinned(i) && !tab_model->IsAppTab(i)) |
| + tab_model->SetTabPinned(i, false); |
| + } |
| + } |
| + } |
| + MarkAsDone(PINNED_TABS); |
| } |
| void ProfileResetter::Observe(int type, |