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)#ifndef CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This namespace contains the chrome first-run installation actions needed to 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fully test the custom installer. It also contains the opposite actions to 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// execute during uninstall. When the first run UI is ready we won't 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// do the actions unconditionally. Currently the only action is to create a 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// desktop shortcut. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The way we detect first-run is by looking at a 'sentinel' file. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If it does not exist we understand that we need to do the first time 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// install work for this user. After that the sentinel file is created. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace first_run { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)enum AutoImportState { 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AUTO_IMPORT_NONE = 0, 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AUTO_IMPORT_CALLED = 1 << 0, 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AUTO_IMPORT_PROFILE_IMPORTED = 1 << 1, 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AUTO_IMPORT_BOOKMARKS_FILE_IMPORTED = 1 << 2, 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum FirstRunBubbleMetric { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FIRST_RUN_BUBBLE_SHOWN = 0, // The search engine bubble was shown. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FIRST_RUN_BUBBLE_CHANGE_INVOKED, // The bubble's "Change" was invoked. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NUM_FIRST_RUN_BUBBLE_METRICS 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Options for the first run bubble. The default is FIRST_RUN_BUBBLE_DONT_SHOW. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// FIRST_RUN_BUBBLE_SUPPRESS is stronger in that FIRST_RUN_BUBBLE_SHOW should 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// never be set once FIRST_RUN_BUBBLE_SUPPRESS is set. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum FirstRunBubbleOptions { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FIRST_RUN_BUBBLE_DONT_SHOW, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FIRST_RUN_BUBBLE_SUPPRESS, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FIRST_RUN_BUBBLE_SHOW, 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum ProcessMasterPreferencesResult { 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) FIRST_RUN_PROCEED = 0, // Proceed with first run. 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EULA_EXIT_NOW, // Should immediately exit due to EULA flow. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See ProcessMasterPreferences for more info about this structure. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MasterPrefs { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MasterPrefs(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~MasterPrefs(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(macourteau): as part of the master preferences refactoring effort, 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // remove items from here which are being stored temporarily only to be later 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // dumped into local_state. Also see related TODO in chrome_browser_main.cc. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ping_delay; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool homepage_defined; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int do_import_items; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int dont_import_items; 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool make_chrome_default_for_user; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool suppress_first_run_default_browser_prompt; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> new_tabs; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> bookmarks; 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string import_bookmarks_path; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string variations_seed; 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string variations_seed_signature; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string suppress_default_browser_prompt_for_version; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if this is the first time chrome is run for this user. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsChromeFirstRun(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#if defined(OS_MACOSX) 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Returns true if |command_line|'s switches explicitly specify that first run 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// should be suppressed in the current run. 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool IsFirstRunSuppressed(const base::CommandLine& command_line); 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif 94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Creates the first run sentinel if needed. This should only be called after 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// the process singleton has been grabbed by the current process 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// (http://crbug.com/264694). 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void CreateSentinelIfNeeded(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get RLZ ping delay pref name. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetPingDelayPrefName(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Register user preferences used by the MasterPrefs structure. 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Sets the kShowFirstRunBubbleOption local state pref so that the browser 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shows the bubble once the main message loop gets going (or refrains from 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// showing the bubble, if |show_bubble| is not FIRST_RUN_BUBBLE_SHOW). 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Once FIRST_RUN_BUBBLE_SUPPRESS is set, no other value can be set. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns false if the pref service could not be retrieved. 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SetShowFirstRunBubblePref(FirstRunBubbleOptions show_bubble_option); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Sets a flag that will cause ShouldShowWelcomePage to return true 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// exactly once, so that the browser loads the welcome tab once the 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// message loop gets going. 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetShouldShowWelcomePage(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns true if the welcome page should be shown. 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This will return true only once: The first time it is called after 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// SetShouldShowWelcomePage() is called. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ShouldShowWelcomePage(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Sets a flag that will cause ShouldDoPersonalDataManagerFirstRun() 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to return true exactly once, so that the browser loads 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// PersonalDataManager once the main message loop gets going. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetShouldDoPersonalDataManagerFirstRun(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns true if the autofill personal data manager first-run action 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// should be taken. 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This will return true only once, the first time it is called after 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// SetShouldDoPersonalDataManagerFirstRun() is called. 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ShouldDoPersonalDataManagerFirstRun(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Log a metric for the "FirstRun.SearchEngineBubble" histogram. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LogFirstRunMetric(FirstRunBubbleMetric metric); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Automatically import history and home page (and search engine, if 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// ShouldShowSearchEngineDialog is true). Also imports bookmarks from file if 14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// |import_bookmarks_path| is not empty. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutoImport(Profile* profile, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool homepage_defined, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int import_items, 14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int dont_import_items, 14690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& import_bookmarks_path); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Does remaining first run tasks. This can pop the first run consent dialog on 149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// linux. |make_chrome_default_for_user| is the value of 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// kMakeChromeDefaultForUser in master_preferences which contributes to the 151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// decision of making chrome default browser in post import tasks. 152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void DoPostImportTasks(Profile* profile, bool make_chrome_default_for_user); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Returns the current state of AutoImport as recorded in a bitfield formed from 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// values in AutoImportState. 15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)uint16 auto_import_state(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Set a master preferences file path that overrides platform defaults. 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetMasterPrefsPathForTesting(const base::FilePath& master_prefs); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// The master_preferences is a JSON file with the same entries as the 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'Default\Preferences' file. This function locates this file from a standard 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// location, processes it, and uses its content to initialize the preferences 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// for the profile pointed to by |user_data_dir|. After processing the file, 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// this function returns a value from the ProcessMasterPreferencesResult enum, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// indicating whether the first run flow should be shown, skipped, or whether 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the browser should exit. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This function overwrites any existing Preferences file and is only meant to 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// be invoked on first run. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See chrome/installer/util/master_preferences.h for a description of 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'master_preferences' file. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProcessMasterPreferencesResult ProcessMasterPreferences( 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& user_data_dir, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MasterPrefs* out_prefs); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace first_run 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_ 181