OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/first_run/first_run.h" | 5 #include "chrome/browser/first_run/first_run.h" |
6 | 6 |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 | 8 |
9 // TODO(port): move more code in back from the first_run_win.cc module. | 9 // TODO(port): move more code in back from the first_run_win.cc module. |
10 | 10 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 | 87 |
88 // static | 88 // static |
89 bool FirstRun::ProcessMasterPreferences(const FilePath& user_data_dir, | 89 bool FirstRun::ProcessMasterPreferences(const FilePath& user_data_dir, |
90 MasterPrefs* out_prefs) { | 90 MasterPrefs* out_prefs) { |
91 DCHECK(!user_data_dir.empty()); | 91 DCHECK(!user_data_dir.empty()); |
92 | 92 |
93 // The standard location of the master prefs is next to the chrome binary. | 93 // The standard location of the master prefs is next to the chrome binary. |
94 FilePath master_prefs; | 94 FilePath master_prefs; |
95 if (!PathService::Get(base::DIR_EXE, &master_prefs)) | 95 if (!PathService::Get(base::DIR_EXE, &master_prefs)) |
96 return true; | 96 return true; |
97 master_prefs = master_prefs.AppendASCII(installer::kDefaultMasterPrefs); | 97 master_prefs = master_prefs.AppendASCII(installer_util::kDefaultMasterPrefs); |
98 | 98 |
99 installer::MasterPreferences prefs(master_prefs); | 99 installer_util::MasterPreferences prefs(master_prefs); |
100 if (!prefs.read_from_file()) | 100 if (!prefs.read_from_file()) |
101 return true; | 101 return true; |
102 | 102 |
103 out_prefs->new_tabs = prefs.GetFirstRunTabs(); | 103 out_prefs->new_tabs = prefs.GetFirstRunTabs(); |
104 | 104 |
105 bool value = false; | 105 bool value = false; |
106 | 106 |
107 #if defined(OS_WIN) | 107 #if defined(OS_WIN) |
108 // RLZ is currently a Windows-only phenomenon. When it comes to the Mac/ | 108 // RLZ is currently a Windows-only phenomenon. When it comes to the Mac/ |
109 // Linux, enable it here. | 109 // Linux, enable it here. |
110 if (!prefs.GetInt(installer::master_preferences::kDistroPingDelay, | 110 if (!prefs.GetInt(installer_util::master_preferences::kDistroPingDelay, |
111 &out_prefs->ping_delay)) { | 111 &out_prefs->ping_delay)) { |
112 // 90 seconds is the default that we want to use in case master | 112 // 90 seconds is the default that we want to use in case master |
113 // preferences is missing, corrupt or ping_delay is missing. | 113 // preferences is missing, corrupt or ping_delay is missing. |
114 out_prefs->ping_delay = 90; | 114 out_prefs->ping_delay = 90; |
115 } | 115 } |
116 | 116 |
117 if (prefs.GetBool(installer::master_preferences::kRequireEula, &value) && | 117 if (prefs.GetBool(installer_util::master_preferences::kRequireEula, &value) && |
118 value) { | 118 value) { |
119 // Show the post-installation EULA. This is done by setup.exe and the | 119 // Show the post-installation EULA. This is done by setup.exe and the |
120 // result determines if we continue or not. We wait here until the user | 120 // result determines if we continue or not. We wait here until the user |
121 // dismisses the dialog. | 121 // dismisses the dialog. |
122 | 122 |
123 // The actual eula text is in a resource in chrome. We extract it to | 123 // The actual eula text is in a resource in chrome. We extract it to |
124 // a text file so setup.exe can use it as an inner frame. | 124 // a text file so setup.exe can use it as an inner frame. |
125 FilePath inner_html; | 125 FilePath inner_html; |
126 if (WriteEULAtoTempFile(&inner_html)) { | 126 if (WriteEULAtoTempFile(&inner_html)) { |
127 int retcode = 0; | 127 int retcode = 0; |
128 if (!LaunchSetupWithParam(installer::switches::kShowEula, | 128 if (!LaunchSetupWithParam(installer_util::switches::kShowEula, |
129 inner_html.ToWStringHack(), &retcode) || | 129 inner_html.ToWStringHack(), &retcode) || |
130 (retcode == installer::EULA_REJECTED)) { | 130 (retcode == installer_util::EULA_REJECTED)) { |
131 LOG(WARNING) << "EULA rejected. Fast exit."; | 131 LOG(WARNING) << "EULA rejected. Fast exit."; |
132 ::ExitProcess(1); | 132 ::ExitProcess(1); |
133 } | 133 } |
134 if (retcode == installer::EULA_ACCEPTED) { | 134 if (retcode == installer_util::EULA_ACCEPTED) { |
135 VLOG(1) << "EULA : no collection"; | 135 VLOG(1) << "EULA : no collection"; |
136 GoogleUpdateSettings::SetCollectStatsConsent(false); | 136 GoogleUpdateSettings::SetCollectStatsConsent(false); |
137 } else if (retcode == installer::EULA_ACCEPTED_OPT_IN) { | 137 } else if (retcode == installer_util::EULA_ACCEPTED_OPT_IN) { |
138 VLOG(1) << "EULA : collection consent"; | 138 VLOG(1) << "EULA : collection consent"; |
139 GoogleUpdateSettings::SetCollectStatsConsent(true); | 139 GoogleUpdateSettings::SetCollectStatsConsent(true); |
140 } | 140 } |
141 } | 141 } |
142 } | 142 } |
143 #endif | 143 #endif |
144 | 144 |
145 if (prefs.GetBool(installer::master_preferences::kAltFirstRunBubble, | 145 if (prefs.GetBool(installer_util::master_preferences::kAltFirstRunBubble, |
146 &value) && value) { | 146 &value) && value) { |
147 FirstRun::SetOEMFirstRunBubblePref(); | 147 FirstRun::SetOEMFirstRunBubblePref(); |
148 } | 148 } |
149 | 149 |
150 FilePath user_prefs = GetDefaultPrefFilePath(true, user_data_dir); | 150 FilePath user_prefs = GetDefaultPrefFilePath(true, user_data_dir); |
151 if (user_prefs.empty()) | 151 if (user_prefs.empty()) |
152 return true; | 152 return true; |
153 | 153 |
154 // The master prefs are regular prefs so we can just copy the file | 154 // The master prefs are regular prefs so we can just copy the file |
155 // to the default place and they just work. | 155 // to the default place and they just work. |
156 if (!file_util::CopyFile(master_prefs, user_prefs)) | 156 if (!file_util::CopyFile(master_prefs, user_prefs)) |
157 return true; | 157 return true; |
158 | 158 |
159 #if defined(OS_WIN) | 159 #if defined(OS_WIN) |
160 DictionaryValue* extensions = 0; | 160 DictionaryValue* extensions = 0; |
161 if (prefs.GetExtensionsBlock(&extensions)) { | 161 if (prefs.GetExtensionsBlock(&extensions)) { |
162 VLOG(1) << "Extensions block found in master preferences"; | 162 VLOG(1) << "Extensions block found in master preferences"; |
163 DoDelayedInstallExtensions(); | 163 DoDelayedInstallExtensions(); |
164 } | 164 } |
165 #endif | 165 #endif |
166 | 166 |
167 if (prefs.GetBool(installer::master_preferences::kDistroImportSearchPref, | 167 if (prefs.GetBool(installer_util::master_preferences::kDistroImportSearchPref, |
168 &value)) { | 168 &value)) { |
169 if (value) { | 169 if (value) { |
170 out_prefs->do_import_items |= importer::SEARCH_ENGINES; | 170 out_prefs->do_import_items |= importer::SEARCH_ENGINES; |
171 } else { | 171 } else { |
172 out_prefs->dont_import_items |= importer::SEARCH_ENGINES; | 172 out_prefs->dont_import_items |= importer::SEARCH_ENGINES; |
173 } | 173 } |
174 } | 174 } |
175 | 175 |
176 // Check to see if search engine logos should be randomized. | 176 // Check to see if search engine logos should be randomized. |
177 if (prefs.GetBool( | 177 if (prefs.GetBool( |
178 installer::master_preferences:: | 178 installer_util::master_preferences:: |
179 kSearchEngineExperimentRandomizePref, | 179 kSearchEngineExperimentRandomizePref, |
180 &value) && value) { | 180 &value) && value) { |
181 out_prefs->randomize_search_engine_experiment = true; | 181 out_prefs->randomize_search_engine_experiment = true; |
182 } | 182 } |
183 | 183 |
184 // If we're suppressing the first-run bubble, set that preference now. | 184 // If we're suppressing the first-run bubble, set that preference now. |
185 // Otherwise, wait until the user has completed first run to set it, so the | 185 // Otherwise, wait until the user has completed first run to set it, so the |
186 // user is guaranteed to see the bubble iff he or she has completed the first | 186 // user is guaranteed to see the bubble iff he or she has completed the first |
187 // run process. | 187 // run process. |
188 if (prefs.GetBool( | 188 if (prefs.GetBool( |
189 installer::master_preferences::kDistroSuppressFirstRunBubble, | 189 installer_util::master_preferences::kDistroSuppressFirstRunBubble, |
190 &value) && value) | 190 &value) && value) |
191 FirstRun::SetShowFirstRunBubblePref(false); | 191 FirstRun::SetShowFirstRunBubblePref(false); |
192 | 192 |
193 if (prefs.GetBool( | 193 if (prefs.GetBool( |
194 installer::master_preferences::kDistroImportHistoryPref, | 194 installer_util::master_preferences::kDistroImportHistoryPref, |
195 &value)) { | 195 &value)) { |
196 if (value) { | 196 if (value) { |
197 out_prefs->do_import_items |= importer::HISTORY; | 197 out_prefs->do_import_items |= importer::HISTORY; |
198 } else { | 198 } else { |
199 out_prefs->dont_import_items |= importer::HISTORY; | 199 out_prefs->dont_import_items |= importer::HISTORY; |
200 } | 200 } |
201 } | 201 } |
202 | 202 |
203 std::string not_used; | 203 std::string not_used; |
204 out_prefs->homepage_defined = prefs.GetString(prefs::kHomePage, ¬_used); | 204 out_prefs->homepage_defined = prefs.GetString(prefs::kHomePage, ¬_used); |
205 | 205 |
206 if (prefs.GetBool( | 206 if (prefs.GetBool( |
207 installer::master_preferences::kDistroImportHomePagePref, | 207 installer_util::master_preferences::kDistroImportHomePagePref, |
208 &value)) { | 208 &value)) { |
209 if (value) { | 209 if (value) { |
210 out_prefs->do_import_items |= importer::HOME_PAGE; | 210 out_prefs->do_import_items |= importer::HOME_PAGE; |
211 } else { | 211 } else { |
212 out_prefs->dont_import_items |= importer::HOME_PAGE; | 212 out_prefs->dont_import_items |= importer::HOME_PAGE; |
213 } | 213 } |
214 } | 214 } |
215 | 215 |
216 // Bookmarks are never imported unless specifically turned on. | 216 // Bookmarks are never imported unless specifically turned on. |
217 if (prefs.GetBool( | 217 if (prefs.GetBool( |
218 installer::master_preferences::kDistroImportBookmarksPref, | 218 installer_util::master_preferences::kDistroImportBookmarksPref, |
219 &value) && value) { | 219 &value) && value) { |
220 out_prefs->do_import_items |= importer::FAVORITES; | 220 out_prefs->do_import_items |= importer::FAVORITES; |
221 } | 221 } |
222 | 222 |
223 if (prefs.GetBool( | 223 if (prefs.GetBool( |
224 installer::master_preferences::kMakeChromeDefaultForUser, | 224 installer_util::master_preferences::kMakeChromeDefaultForUser, |
225 &value) && value) { | 225 &value) && value) { |
226 out_prefs->make_chrome_default = true; | 226 out_prefs->make_chrome_default = true; |
227 } | 227 } |
228 | 228 |
229 // TODO(mirandac): Refactor skip-first-run-ui process into regular first run | 229 // TODO(mirandac): Refactor skip-first-run-ui process into regular first run |
230 // import process. http://crbug.com/49647 | 230 // import process. http://crbug.com/49647 |
231 // Note we are skipping all other master preferences if skip-first-run-ui | 231 // Note we are skipping all other master preferences if skip-first-run-ui |
232 // is *not* specified. (That is, we continue only if skipping first run ui.) | 232 // is *not* specified. (That is, we continue only if skipping first run ui.) |
233 if (!prefs.GetBool( | 233 if (!prefs.GetBool( |
234 installer::master_preferences::kDistroSkipFirstRunPref, | 234 installer_util::master_preferences::kDistroSkipFirstRunPref, |
235 &value) || !value) { | 235 &value) || !value) { |
236 return true; | 236 return true; |
237 } | 237 } |
238 | 238 |
239 #if !defined(OS_WIN) | 239 #if !defined(OS_WIN) |
240 // From here on we won't show first run so we need to do the work to show the | 240 // From here on we won't show first run so we need to do the work to show the |
241 // bubble anyway, unless it's already been explicitly suppressed. | 241 // bubble anyway, unless it's already been explicitly suppressed. |
242 FirstRun::SetShowFirstRunBubblePref(true); | 242 FirstRun::SetShowFirstRunBubblePref(true); |
243 #endif | 243 #endif |
244 | 244 |
245 // We need to be able to create the first run sentinel or else we cannot | 245 // We need to be able to create the first run sentinel or else we cannot |
246 // proceed because ImportSettings will launch the importer process which | 246 // proceed because ImportSettings will launch the importer process which |
247 // would end up here if the sentinel is not present. | 247 // would end up here if the sentinel is not present. |
248 if (!FirstRun::CreateSentinel()) | 248 if (!FirstRun::CreateSentinel()) |
249 return false; | 249 return false; |
250 | 250 |
251 if (prefs.GetBool(installer::master_preferences::kDistroShowWelcomePage, | 251 if (prefs.GetBool(installer_util::master_preferences::kDistroShowWelcomePage, |
252 &value) && value) { | 252 &value) && value) { |
253 FirstRun::SetShowWelcomePagePref(); | 253 FirstRun::SetShowWelcomePagePref(); |
254 } | 254 } |
255 | 255 |
256 std::string import_bookmarks_path; | 256 std::string import_bookmarks_path; |
257 prefs.GetString( | 257 prefs.GetString( |
258 installer::master_preferences::kDistroImportBookmarksFromFilePref, | 258 installer_util::master_preferences::kDistroImportBookmarksFromFilePref, |
259 &import_bookmarks_path); | 259 &import_bookmarks_path); |
260 | 260 |
261 #if defined(OS_WIN) | 261 #if defined(OS_WIN) |
262 std::wstring brand; | 262 std::wstring brand; |
263 GoogleUpdateSettings::GetBrand(&brand); | 263 GoogleUpdateSettings::GetBrand(&brand); |
264 // This should generally be true, as skip_first_run_ui is a setting used for | 264 // This should generally be true, as skip_first_run_ui is a setting used for |
265 // non-organic builds. | 265 // non-organic builds. |
266 if (!GoogleUpdateSettings::IsOrganic(brand)) { | 266 if (!GoogleUpdateSettings::IsOrganic(brand)) { |
267 // If search engines aren't explicitly imported, don't import. | 267 // If search engines aren't explicitly imported, don't import. |
268 if (!(out_prefs->do_import_items & importer::SEARCH_ENGINES)) { | 268 if (!(out_prefs->do_import_items & importer::SEARCH_ENGINES)) { |
(...skipping 26 matching lines...) Expand all Loading... |
295 // There are bookmarks to import from a file. | 295 // There are bookmarks to import from a file. |
296 FilePath path = FilePath::FromWStringHack(UTF8ToWide( | 296 FilePath path = FilePath::FromWStringHack(UTF8ToWide( |
297 import_bookmarks_path)); | 297 import_bookmarks_path)); |
298 if (!FirstRun::ImportBookmarks(path)) { | 298 if (!FirstRun::ImportBookmarks(path)) { |
299 LOG(WARNING) << "silent bookmark import failed"; | 299 LOG(WARNING) << "silent bookmark import failed"; |
300 } | 300 } |
301 } | 301 } |
302 #endif | 302 #endif |
303 | 303 |
304 if (prefs.GetBool( | 304 if (prefs.GetBool( |
305 installer::master_preferences::kMakeChromeDefaultForUser, | 305 installer_util::master_preferences::kMakeChromeDefaultForUser, |
306 &value) && value) { | 306 &value) && value) { |
307 ShellIntegration::SetAsDefaultBrowser(); | 307 ShellIntegration::SetAsDefaultBrowser(); |
308 } | 308 } |
309 | 309 |
310 return false; | 310 return false; |
311 } | 311 } |
312 | 312 |
313 // static | 313 // static |
314 bool FirstRun::IsChromeFirstRun() { | 314 bool FirstRun::IsChromeFirstRun() { |
315 if (first_run_ != FIRST_RUN_UNKNOWN) | 315 if (first_run_ != FIRST_RUN_UNKNOWN) |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 if (!observer->ended()) { | 674 if (!observer->ended()) { |
675 observer->set_should_quit_message_loop(); | 675 observer->set_should_quit_message_loop(); |
676 MessageLoop::current()->Run(); | 676 MessageLoop::current()->Run(); |
677 } | 677 } |
678 | 678 |
679 // Unfortunately there's no success/fail signal in ImporterHost. | 679 // Unfortunately there's no success/fail signal in ImporterHost. |
680 return true; | 680 return true; |
681 } | 681 } |
682 | 682 |
683 #endif // OS_POSIX | 683 #endif // OS_POSIX |
OLD | NEW |