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

Unified Diff: chrome/browser/profile_resetter/profile_resetter.cc

Issue 16980002: Reset profile: unpin all pinned tabs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Android compilation Created 7 years, 6 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/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,

Powered by Google App Engine
This is Rietveld 408576698