1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_
6 #define CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_
11 #include "base/basictypes.h"
21 namespace user_prefs
{
22 class PrefRegistrySyncable
;
25 // This namespace contains the chrome first-run installation actions needed to
26 // fully test the custom installer. It also contains the opposite actions to
27 // execute during uninstall. When the first run UI is ready we won't
28 // do the actions unconditionally. Currently the only action is to create a
31 // The way we detect first-run is by looking at a 'sentinel' file.
32 // If it does not exist we understand that we need to do the first time
33 // install work for this user. After that the sentinel file is created.
36 enum AutoImportState
{
38 AUTO_IMPORT_CALLED
= 1 << 0,
39 AUTO_IMPORT_PROFILE_IMPORTED
= 1 << 1,
40 AUTO_IMPORT_BOOKMARKS_FILE_IMPORTED
= 1 << 2,
43 enum FirstRunBubbleMetric
{
44 FIRST_RUN_BUBBLE_SHOWN
= 0, // The search engine bubble was shown.
45 FIRST_RUN_BUBBLE_CHANGE_INVOKED
, // The bubble's "Change" was invoked.
46 NUM_FIRST_RUN_BUBBLE_METRICS
49 // Options for the first run bubble. The default is FIRST_RUN_BUBBLE_DONT_SHOW.
50 // FIRST_RUN_BUBBLE_SUPPRESS is stronger in that FIRST_RUN_BUBBLE_SHOW should
51 // never be set once FIRST_RUN_BUBBLE_SUPPRESS is set.
52 enum FirstRunBubbleOptions
{
53 FIRST_RUN_BUBBLE_DONT_SHOW
,
54 FIRST_RUN_BUBBLE_SUPPRESS
,
55 FIRST_RUN_BUBBLE_SHOW
,
58 enum ProcessMasterPreferencesResult
{
59 FIRST_RUN_PROCEED
= 0, // Proceed with first run.
60 EULA_EXIT_NOW
, // Should immediately exit due to EULA flow.
63 // See ProcessMasterPreferences for more info about this structure.
68 // TODO(macourteau): as part of the master preferences refactoring effort,
69 // remove items from here which are being stored temporarily only to be later
70 // dumped into local_state. Also see related TODO in chrome_browser_main.cc.
73 bool homepage_defined
;
75 int dont_import_items
;
76 bool make_chrome_default_for_user
;
77 bool suppress_first_run_default_browser_prompt
;
78 std::vector
<GURL
> new_tabs
;
79 std::vector
<GURL
> bookmarks
;
80 std::string import_bookmarks_path
;
81 std::string variations_seed
;
82 std::string variations_seed_signature
;
83 std::string suppress_default_browser_prompt_for_version
;
86 // Returns true if this is the first time chrome is run for this user.
87 bool IsChromeFirstRun();
89 #if defined(OS_MACOSX)
90 // Returns true if |command_line|'s switches explicitly specify that first run
91 // should be suppressed in the current run.
92 bool IsFirstRunSuppressed(const base::CommandLine
& command_line
);
95 // Creates the first run sentinel if needed. This should only be called after
96 // the process singleton has been grabbed by the current process
97 // (http://crbug.com/264694).
98 void CreateSentinelIfNeeded();
100 // Get RLZ ping delay pref name.
101 std::string
GetPingDelayPrefName();
103 // Register user preferences used by the MasterPrefs structure.
104 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable
* registry
);
106 // Remove the first run sentinel file; returns false on failure.
107 bool RemoveSentinel();
109 // Sets the kShowFirstRunBubbleOption local state pref so that the browser
110 // shows the bubble once the main message loop gets going (or refrains from
111 // showing the bubble, if |show_bubble| is not FIRST_RUN_BUBBLE_SHOW).
112 // Once FIRST_RUN_BUBBLE_SUPPRESS is set, no other value can be set.
113 // Returns false if the pref service could not be retrieved.
114 bool SetShowFirstRunBubblePref(FirstRunBubbleOptions show_bubble_option
);
116 // Sets a flag that will cause ShouldShowWelcomePage to return true
117 // exactly once, so that the browser loads the welcome tab once the
118 // message loop gets going.
119 void SetShouldShowWelcomePage();
121 // Returns true if the welcome page should be shown.
123 // This will return true only once: The first time it is called after
124 // SetShouldShowWelcomePage() is called.
125 bool ShouldShowWelcomePage();
127 // Sets a flag that will cause ShouldDoPersonalDataManagerFirstRun()
128 // to return true exactly once, so that the browser loads
129 // PersonalDataManager once the main message loop gets going.
130 void SetShouldDoPersonalDataManagerFirstRun();
132 // Returns true if the autofill personal data manager first-run action
135 // This will return true only once, the first time it is called after
136 // SetShouldDoPersonalDataManagerFirstRun() is called.
137 bool ShouldDoPersonalDataManagerFirstRun();
139 // Log a metric for the "FirstRun.SearchEngineBubble" histogram.
140 void LogFirstRunMetric(FirstRunBubbleMetric metric
);
142 // Automatically import history and home page (and search engine, if
143 // ShouldShowSearchEngineDialog is true). Also imports bookmarks from file if
144 // |import_bookmarks_path| is not empty.
145 void AutoImport(Profile
* profile
,
146 bool homepage_defined
,
148 int dont_import_items
,
149 const std::string
& import_bookmarks_path
);
151 // Does remaining first run tasks. This can pop the first run consent dialog on
152 // linux. |make_chrome_default_for_user| is the value of
153 // kMakeChromeDefaultForUser in master_preferences which contributes to the
154 // decision of making chrome default browser in post import tasks.
155 void DoPostImportTasks(Profile
* profile
, bool make_chrome_default_for_user
);
157 // Returns the current state of AutoImport as recorded in a bitfield formed from
158 // values in AutoImportState.
159 uint16
auto_import_state();
161 // Set a master preferences file path that overrides platform defaults.
162 void SetMasterPrefsPathForTesting(const base::FilePath
& master_prefs
);
164 // The master_preferences is a JSON file with the same entries as the
165 // 'Default\Preferences' file. This function locates this file from a standard
166 // location, processes it, and uses its content to initialize the preferences
167 // for the profile pointed to by |user_data_dir|. After processing the file,
168 // this function returns a value from the ProcessMasterPreferencesResult enum,
169 // indicating whether the first run flow should be shown, skipped, or whether
170 // the browser should exit.
172 // This function overwrites any existing Preferences file and is only meant to
173 // be invoked on first run.
175 // See chrome/installer/util/master_preferences.h for a description of
176 // 'master_preferences' file.
177 ProcessMasterPreferencesResult
ProcessMasterPreferences(
178 const base::FilePath
& user_data_dir
,
179 MasterPrefs
* out_prefs
);
181 } // namespace first_run
183 #endif // CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_