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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698