Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / first_run / first_run.h
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.
4
5 #ifndef CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_
6 #define CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12
13 class CommandLine;
14 class GURL;
15 class Profile;
16
17 namespace base {
18 class FilePath;
19 }
20
21 namespace user_prefs {
22 class PrefRegistrySyncable;
23 }
24
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
29 // desktop shortcut.
30 //
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.
34 namespace first_run {
35
36 enum AutoImportState {
37   AUTO_IMPORT_NONE = 0,
38   AUTO_IMPORT_CALLED = 1 << 0,
39   AUTO_IMPORT_PROFILE_IMPORTED = 1 << 1,
40   AUTO_IMPORT_BOOKMARKS_FILE_IMPORTED = 1 << 2,
41 };
42
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
47 };
48
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,
56 };
57
58 enum ProcessMasterPreferencesResult {
59   FIRST_RUN_PROCEED = 0,  // Proceed with first run.
60   EULA_EXIT_NOW,          // Should immediately exit due to EULA flow.
61 };
62
63 // See ProcessMasterPreferences for more info about this structure.
64 struct MasterPrefs {
65   MasterPrefs();
66   ~MasterPrefs();
67
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.
71
72   int ping_delay;
73   bool homepage_defined;
74   int do_import_items;
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;
84 };
85
86 // Returns true if this is the first time chrome is run for this user.
87 bool IsChromeFirstRun();
88
89 // Returns true if |command_line|'s switches explicitly specify that first run
90 // should be suppressed in the current run.
91 bool IsFirstRunSuppressed(const CommandLine& command_line);
92
93 // Creates the first run sentinel if needed. This should only be called after
94 // the process singleton has been grabbed by the current process
95 // (http://crbug.com/264694).
96 void CreateSentinelIfNeeded();
97
98 // Get RLZ ping delay pref name.
99 std::string GetPingDelayPrefName();
100
101 // Register user preferences used by the MasterPrefs structure.
102 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
103
104 // Removes the sentinel file created in ConfigDone(). Returns false if the
105 // sentinel file could not be removed.
106 bool RemoveSentinel();
107
108 // Sets the kShowFirstRunBubbleOption local state pref so that the browser
109 // shows the bubble once the main message loop gets going (or refrains from
110 // showing the bubble, if |show_bubble| is not FIRST_RUN_BUBBLE_SHOW).
111 // Once FIRST_RUN_BUBBLE_SUPPRESS is set, no other value can be set.
112 // Returns false if the pref service could not be retrieved.
113 bool SetShowFirstRunBubblePref(FirstRunBubbleOptions show_bubble_option);
114
115 // Sets a flag that will cause ShouldShowWelcomePage to return true
116 // exactly once, so that the browser loads the welcome tab once the
117 // message loop gets going.
118 void SetShouldShowWelcomePage();
119
120 // Returns true if the welcome page should be shown.
121 //
122 // This will return true only once: The first time it is called after
123 // SetShouldShowWelcomePage() is called.
124 bool ShouldShowWelcomePage();
125
126 // Sets a flag that will cause ShouldDoPersonalDataManagerFirstRun()
127 // to return true exactly once, so that the browser loads
128 // PersonalDataManager once the main message loop gets going.
129 void SetShouldDoPersonalDataManagerFirstRun();
130
131 // Returns true if the autofill personal data manager first-run action
132 // should be taken.
133 //
134 // This will return true only once, the first time it is called after
135 // SetShouldDoPersonalDataManagerFirstRun() is called.
136 bool ShouldDoPersonalDataManagerFirstRun();
137
138 // Log a metric for the "FirstRun.SearchEngineBubble" histogram.
139 void LogFirstRunMetric(FirstRunBubbleMetric metric);
140
141 // Automatically import history and home page (and search engine, if
142 // ShouldShowSearchEngineDialog is true). Also imports bookmarks from file if
143 // |import_bookmarks_path| is not empty.
144 void AutoImport(Profile* profile,
145                 bool homepage_defined,
146                 int import_items,
147                 int dont_import_items,
148                 const std::string& import_bookmarks_path);
149
150 // Does remaining first run tasks. This can pop the first run consent dialog on
151 // linux. |make_chrome_default_for_user| is the value of
152 // kMakeChromeDefaultForUser in master_preferences which contributes to the
153 // decision of making chrome default browser in post import tasks.
154 void DoPostImportTasks(Profile* profile, bool make_chrome_default_for_user);
155
156 // Returns the current state of AutoImport as recorded in a bitfield formed from
157 // values in AutoImportState.
158 uint16 auto_import_state();
159
160 // Set a master preferences file path that overrides platform defaults.
161 void SetMasterPrefsPathForTesting(const base::FilePath& master_prefs);
162
163 // The master preferences is a JSON file with the same entries as the
164 // 'Default\Preferences' file. This function locates this file from a standard
165 // location and processes it so it becomes the default preferences in the
166 // profile pointed to by |user_data_dir|. After processing the file, the
167 // function returns a value from the ProcessMasterPreferencesResult enum,
168 // indicating whether the first run flow should be shown, skipped, or whether
169 // the browser should exit.
170 //
171 // This function destroys any existing prefs file and it is meant to be
172 // invoked only on first run.
173 //
174 // See chrome/installer/util/master_preferences.h for a description of
175 // 'master_preferences' file.
176 ProcessMasterPreferencesResult ProcessMasterPreferences(
177     const base::FilePath& user_data_dir,
178     MasterPrefs* out_prefs);
179
180 }  // namespace first_run
181
182 #endif  // CHROME_BROWSER_FIRST_RUN_FIRST_RUN_H_