session_startup_pref.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/session_startup_pref.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/version.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/url_fixer_upper.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/pref_service.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/scoped_user_pref_update.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/protector/protected_prefs_watcher.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/protector/protector_service.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/protector/protector_service_factory.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/cocoa/window_restore_utils.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using protector::ProtectedPrefsWatcher; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using protector::ProtectorServiceFactory; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Converts a SessionStartupPref::Type to an integer written to prefs. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int TypeToPrefValue(SessionStartupPref::Type type) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SessionStartupPref::LAST: return SessionStartupPref::kPrefValueLast; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SessionStartupPref::URLS: return SessionStartupPref::kPrefValueURLs; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: return SessionStartupPref::kPrefValueNewTab; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetNewURLList(PrefService* prefs) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->IsUserModifiablePreference(prefs::kURLsToRestoreOnStartup)) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue new_url_pref_list; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringValue* home_page = 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::StringValue(prefs->GetString(prefs::kHomePage)); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_url_pref_list.Append(home_page); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->Set(prefs::kURLsToRestoreOnStartup, new_url_pref_list); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void URLListToPref(const base::ListValue* url_list, SessionStartupPref* pref) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref->urls.clear(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < url_list->GetSize(); ++i) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url_text; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url_list->GetString(i, &url_text)) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL fixed_url = URLFixerUpper::FixupURL(url_text, ""); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref->urls.push_back(fixed_url); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionStartupPref::RegisterUserPrefs(PrefService* prefs) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->RegisterIntegerPref(prefs::kRestoreOnStartup, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TypeToPrefValue(GetDefaultStartupType()), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService::SYNCABLE_PREF); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->RegisterListPref(prefs::kURLsToRestoreOnStartup, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService::SYNCABLE_PREF); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->RegisterBooleanPref(prefs::kRestoreOnStartupMigrated, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService::UNSYNCABLE_PREF); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref::Type SessionStartupPref::GetDefaultStartupType() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SessionStartupPref::LAST; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SessionStartupPref::DEFAULT; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionStartupPref::SetStartupPref( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionStartupPref& pref) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStartupPref(profile->GetPrefs(), pref); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionStartupPref::SetStartupPref(PrefService* prefs, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionStartupPref& pref) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SessionStartupPref::TypeIsManaged(prefs)) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetInteger(prefs::kRestoreOnStartup, TypeToPrefValue(pref.type)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SessionStartupPref::URLsAreManaged(prefs)) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Always save the URLs, that way the UI can remain consistent even if the 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user changes the startup type pref. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ownership of the ListValue retains with the pref service. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(prefs, prefs::kURLsToRestoreOnStartup); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListValue* url_pref_list = update.Get(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(url_pref_list); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_pref_list->Clear(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pref.urls.size(); ++i) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_pref_list->Set(static_cast<int>(i), 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new StringValue(pref.urls[i].spec())); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref SessionStartupPref::GetStartupPref(Profile* profile) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetStartupPref(profile->GetPrefs()); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref SessionStartupPref::GetStartupPref(PrefService* prefs) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MigrateIfNecessary(prefs); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MigrateMacDefaultPrefIfNecessary(prefs); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref( 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefValueToType(prefs->GetInteger(prefs::kRestoreOnStartup))); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Always load the urls, even if the pref type isn't URLS. This way the 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preferences panels can show the user their last choice. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ListValue* url_list = prefs->GetList(prefs::kURLsToRestoreOnStartup); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLListToPref(url_list, &pref); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionStartupPref::MigrateIfNecessary(PrefService* prefs) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kRestoreOnStartupMigrated)) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read existing values 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* homepage_is_new_tab_page_value = 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetUserPrefValue(prefs::kHomePageIsNewTabPage); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool homepage_is_new_tab_page = true; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (homepage_is_new_tab_page_value) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!homepage_is_new_tab_page_value->GetAsBoolean( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &homepage_is_new_tab_page)) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* restore_on_startup_value = 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetUserPrefValue(prefs::kRestoreOnStartup); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int restore_on_startup = -1; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (restore_on_startup_value) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!restore_on_startup_value->GetAsInteger(&restore_on_startup)) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If restore_on_startup has the deprecated value kPrefValueHomePage, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // migrate it to open the homepage on startup. If 'homepage is NTP' is set, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that means just opening the NTP. If not, it means opening a one-item URL 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // list containing the homepage. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (restore_on_startup == kPrefValueHomePage) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (homepage_is_new_tab_page) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetInteger(prefs::kRestoreOnStartup, kPrefValueNewTab); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetInteger(prefs::kRestoreOnStartup, kPrefValueURLs); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetNewURLList(prefs); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!restore_on_startup_value && !homepage_is_new_tab_page && 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDefaultStartupType() == DEFAULT) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // kRestoreOnStartup was never set by the user, but the homepage was set. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrate to the list of URLs. (If restore_on_startup was never set, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and homepage_is_new_tab_page is true, no action is needed. The new 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default value is "open the new tab page" which is what we want.) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetInteger(prefs::kRestoreOnStartup, kPrefValueURLs); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetNewURLList(prefs); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetBoolean(prefs::kRestoreOnStartupMigrated, true); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionStartupPref::MigrateMacDefaultPrefIfNecessary(PrefService* prefs) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!restore_utils::IsWindowRestoreEnabled()) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default startup pref used to be LAST, now it is DEFAULT. Don't change 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the setting for existing profiles (even if the user has never changed it), 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but make new profiles default to DEFAULT. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool old_profile_version = Version(prefs->GetString( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kProfileCreatedByVersion)).IsOlderThan("21.0.1180.0"); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (old_profile_version && TypeIsDefault(prefs)) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetInteger(prefs::kRestoreOnStartup, kPrefValueLast); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SessionStartupPref::TypeIsManaged(PrefService* prefs) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref_restore = 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->FindPreference(prefs::kRestoreOnStartup); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(pref_restore); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_restore->IsManaged(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SessionStartupPref::URLsAreManaged(PrefService* prefs) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref_urls = 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->FindPreference(prefs::kURLsToRestoreOnStartup); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(pref_urls); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_urls->IsManaged(); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SessionStartupPref::TypeIsDefault(PrefService* prefs) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(prefs); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref_restore = 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->FindPreference(prefs::kRestoreOnStartup); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(pref_restore); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_restore->IsDefaultValue(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref::Type SessionStartupPref::PrefValueToType(int pref_value) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (pref_value) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kPrefValueLast: return SessionStartupPref::LAST; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kPrefValueURLs: return SessionStartupPref::URLS; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kPrefValueHomePage: return SessionStartupPref::HOMEPAGE; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: return SessionStartupPref::DEFAULT; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SessionStartupPref::DidStartupPrefChange(Profile* profile) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtectedPrefsWatcher* prefs_watcher = 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtectorServiceFactory::GetForProfile(profile)->GetPrefsWatcher(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_watcher->DidPrefChange(prefs::kRestoreOnStartup) || 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_watcher->DidPrefChange(prefs::kURLsToRestoreOnStartup); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref SessionStartupPref::GetStartupPrefBackup(Profile* profile) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protector::ProtectedPrefsWatcher* prefs_watcher = 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protector::ProtectorServiceFactory::GetForProfile(profile)-> 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefsWatcher(); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(prefs_watcher->GetBackupForPref( 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kRestoreOnStartup)->GetAsInteger(&type)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref backup_pref(PrefValueToType(type)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ListValue* url_list; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(prefs_watcher->GetBackupForPref( 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kURLsToRestoreOnStartup)->GetAsList(&url_list)); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLListToPref(url_list, &backup_pref); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return backup_pref; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref::SessionStartupPref(Type type) : type(type) {} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionStartupPref::~SessionStartupPref() {} 268