Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(390)

Side by Side Diff: chrome/browser/first_run/first_run.cc

Issue 12670013: Out-of-process import on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Keep Google Toolbar import in-process. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 10 matching lines...) Expand all
21 #include "chrome/browser/extensions/extension_service.h" 21 #include "chrome/browser/extensions/extension_service.h"
22 #include "chrome/browser/extensions/updater/extension_updater.h" 22 #include "chrome/browser/extensions/updater/extension_updater.h"
23 #include "chrome/browser/first_run/first_run_dialog.h" 23 #include "chrome/browser/first_run/first_run_dialog.h"
24 #include "chrome/browser/first_run/first_run_internal.h" 24 #include "chrome/browser/first_run/first_run_internal.h"
25 #include "chrome/browser/google/google_util.h" 25 #include "chrome/browser/google/google_util.h"
26 #include "chrome/browser/importer/external_process_importer_host.h" 26 #include "chrome/browser/importer/external_process_importer_host.h"
27 #include "chrome/browser/importer/importer_host.h" 27 #include "chrome/browser/importer/importer_host.h"
28 #include "chrome/browser/importer/importer_list.h" 28 #include "chrome/browser/importer/importer_list.h"
29 #include "chrome/browser/importer/importer_progress_observer.h" 29 #include "chrome/browser/importer/importer_progress_observer.h"
30 #include "chrome/browser/importer/importer_type.h" 30 #include "chrome/browser/importer/importer_type.h"
31 #include "chrome/browser/importer/profile_writer.h"
31 #include "chrome/browser/profiles/profile_manager.h" 32 #include "chrome/browser/profiles/profile_manager.h"
32 #include "chrome/browser/search_engines/template_url_service.h" 33 #include "chrome/browser/search_engines/template_url_service.h"
33 #include "chrome/browser/search_engines/template_url_service_factory.h" 34 #include "chrome/browser/search_engines/template_url_service_factory.h"
34 #include "chrome/browser/shell_integration.h" 35 #include "chrome/browser/shell_integration.h"
35 #include "chrome/browser/signin/signin_manager.h" 36 #include "chrome/browser/signin/signin_manager.h"
36 #include "chrome/browser/signin/signin_manager_factory.h" 37 #include "chrome/browser/signin/signin_manager_factory.h"
37 #include "chrome/browser/signin/signin_tracker.h" 38 #include "chrome/browser/signin/signin_tracker.h"
38 #include "chrome/browser/ui/browser.h" 39 #include "chrome/browser/ui/browser.h"
39 #include "chrome/browser/ui/browser_finder.h" 40 #include "chrome/browser/ui/browser_finder.h"
40 #include "chrome/browser/ui/global_error/global_error_service.h" 41 #include "chrome/browser/ui/global_error/global_error_service.h"
(...skipping 15 matching lines...) Expand all
56 #include "content/public/browser/notification_types.h" 57 #include "content/public/browser/notification_types.h"
57 #include "content/public/browser/user_metrics.h" 58 #include "content/public/browser/user_metrics.h"
58 #include "content/public/browser/web_contents.h" 59 #include "content/public/browser/web_contents.h"
59 #include "google_apis/gaia/gaia_auth_util.h" 60 #include "google_apis/gaia/gaia_auth_util.h"
60 #include "googleurl/src/gurl.h" 61 #include "googleurl/src/gurl.h"
61 62
62 using content::UserMetricsAction; 63 using content::UserMetricsAction;
63 64
64 namespace { 65 namespace {
65 66
67 // A bitfield formed from values in AutoImportState to record the state of
68 // AutoImport. This is used in testing to verify import startup actions that
69 // occur before an observer can be registered in the test.
70 uint16 g_auto_import_state = first_run::AUTO_IMPORT_NONE;
71
66 // Flags for functions of similar name. 72 // Flags for functions of similar name.
67 bool g_should_show_welcome_page = false; 73 bool g_should_show_welcome_page = false;
68 bool g_should_do_autofill_personal_data_manager_first_run = false; 74 bool g_should_do_autofill_personal_data_manager_first_run = false;
69 75
70 // Flags indicating whether a first-run profile auto import was performed, and 76 // This class acts as an observer for the ImporterProgressObserver::ImportEnded
71 // whether the importer process exited successfully. 77 // callback. When the import process is started, certain errors may cause
72 bool did_perform_profile_import = false; 78 // ImportEnded() to be called synchronously, but the typical case is that
73 bool profile_import_exited_successfully = false; 79 // ImportEnded() is called asynchronously. Thus we have to handle both cases.
80 class ImportEndedObserver : public importer::ImporterProgressObserver {
81 public:
82 ImportEndedObserver() : ended_(false),
83 should_quit_message_loop_(false) {}
84 virtual ~ImportEndedObserver() {}
85
86 // importer::ImporterProgressObserver:
87 virtual void ImportStarted() OVERRIDE {}
88 virtual void ImportItemStarted(importer::ImportItem item) OVERRIDE {}
89 virtual void ImportItemEnded(importer::ImportItem item) OVERRIDE {}
90 virtual void ImportEnded() OVERRIDE {
91 ended_ = true;
92 if (should_quit_message_loop_)
93 MessageLoop::current()->Quit();
94 }
95
96 void set_should_quit_message_loop() {
97 should_quit_message_loop_ = true;
98 }
99
100 bool ended() const {
101 return ended_;
102 }
103
104 private:
105 // Set if the import has ended.
106 bool ended_;
107
108 bool should_quit_message_loop_;
109 };
74 110
75 // Helper class that performs delayed first-run tasks that need more of the 111 // Helper class that performs delayed first-run tasks that need more of the
76 // chrome infrastructure to be up and running before they can be attempted. 112 // chrome infrastructure to be up and running before they can be attempted.
77 class FirstRunDelayedTasks : public content::NotificationObserver { 113 class FirstRunDelayedTasks : public content::NotificationObserver {
78 public: 114 public:
79 enum Tasks { 115 enum Tasks {
80 NO_TASK, 116 NO_TASK,
81 INSTALL_EXTENSIONS 117 INSTALL_EXTENSIONS
82 }; 118 };
83 119
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 if (user_prefs->GetBoolean(pref_path)) 222 if (user_prefs->GetBoolean(pref_path))
187 *items |= import_type; 223 *items |= import_type;
188 } else { // no policy (recommended or managed) is set 224 } else { // no policy (recommended or managed) is set
189 if (should_import) 225 if (should_import)
190 *items |= import_type; 226 *items |= import_type;
191 } 227 }
192 228
193 user_prefs->ClearPref(pref_path); 229 user_prefs->ClearPref(pref_path);
194 } 230 }
195 231
196 // Imports bookmarks from an html file. The path to the file is provided in 232 // Launches the import, via |importer_host|, from |source_profile| into
197 // the command line. 233 // |target_profile| for the items specified in the |items_to_import| bitfield.
198 void ImportFromFile(Profile* profile, const CommandLine& cmdline) { 234 // This may be done in a separate process depending on the platform, but it will
199 base::FilePath file_path = 235 // always block until done.
200 cmdline.GetSwitchValuePath(switches::kImportFromFile); 236 void ImportFromSourceProfile(scoped_refptr<ImporterHost> importer_host,
201 if (file_path.empty()) { 237 const importer::SourceProfile& source_profile,
202 NOTREACHED(); 238 Profile* target_profile,
203 return; 239 uint16 items_to_import) {
204 } 240 ImportEndedObserver observer;
205 scoped_refptr<ImporterHost> importer_host(new ImporterHost);
206 importer_host->set_headless();
207
208 importer::SourceProfile source_profile;
209 source_profile.importer_type = importer::TYPE_BOOKMARKS_FILE;
210 source_profile.source_path = file_path;
211
212 first_run::internal::ImportEndedObserver observer;
213 importer_host->SetObserver(&observer); 241 importer_host->SetObserver(&observer);
214 importer_host->StartImportSettings( 242 importer_host->StartImportSettings(source_profile,
215 source_profile, profile, importer::FAVORITES, new ProfileWriter(profile)); 243 target_profile,
244 items_to_import,
245 new ProfileWriter(target_profile));
216 // If the import process has not errored out, block on it. 246 // If the import process has not errored out, block on it.
217 if (!observer.ended()) { 247 if (!observer.ended()) {
218 observer.set_should_quit_message_loop(); 248 observer.set_should_quit_message_loop();
219 MessageLoop::current()->Run(); 249 MessageLoop::current()->Run();
220 } 250 }
221 } 251 }
222 252
253 // Imports bookmarks from an html file whose path is provided by
254 // |import_bookmarks_path|.
255 void ImportFromFile(Profile* profile,
256 scoped_refptr<ImporterHost> file_importer_host,
257 const std::string& import_bookmarks_path) {
258 importer::SourceProfile source_profile;
259 source_profile.importer_type = importer::TYPE_BOOKMARKS_FILE;
260
261 const base::FilePath::StringType& import_bookmarks_path_str =
262 #if defined(OS_WIN)
263 UTF8ToUTF16(import_bookmarks_path);
264 #else
265 import_bookmarks_path;
266 #endif
267 source_profile.source_path = base::FilePath(import_bookmarks_path_str);
268
269 ImportFromSourceProfile(file_importer_host, source_profile, profile,
270 importer::FAVORITES);
271 g_auto_import_state |= first_run::AUTO_IMPORT_BOOKMARKS_FILE_IMPORTED;
272 }
273
274 // Imports settings from the first profile in |importer_list|.
275 void ImportSettings(Profile* profile,
276 scoped_refptr<ImporterHost> importer_host,
277 scoped_refptr<ImporterList> importer_list,
278 int items_to_import) {
279 const importer::SourceProfile& source_profile =
280 importer_list->GetSourceProfileAt(0);
281
282 // Ensure that importers aren't requested to import items that they do not
283 // support. If there is no overlap, skip.
284 items_to_import &= source_profile.services_supported;
285 if (items_to_import == 0)
286 return;
287
288 ImportFromSourceProfile(importer_host, source_profile, profile,
289 items_to_import);
290 g_auto_import_state |= first_run::AUTO_IMPORT_PROFILE_IMPORTED;
291 }
292
223 GURL UrlFromString(const std::string& in) { 293 GURL UrlFromString(const std::string& in) {
224 return GURL(in); 294 return GURL(in);
225 } 295 }
226 296
227 void ConvertStringVectorToGURLVector( 297 void ConvertStringVectorToGURLVector(
228 const std::vector<std::string>& src, 298 const std::vector<std::string>& src,
229 std::vector<GURL>* ret) { 299 std::vector<GURL>* ret) {
230 ret->resize(src.size()); 300 ret->resize(src.size());
231 std::transform(src.begin(), src.end(), ret->begin(), &UrlFromString); 301 std::transform(src.begin(), src.end(), ret->begin(), &UrlFromString);
232 } 302 }
233 303
234 } // namespace 304 } // namespace
235 305
236 namespace first_run { 306 namespace first_run {
237 namespace internal { 307 namespace internal {
238 308
239 FirstRunState first_run_ = FIRST_RUN_UNKNOWN; 309 FirstRunState first_run_ = FIRST_RUN_UNKNOWN;
240 310
241 static base::LazyInstance<base::FilePath> master_prefs_path_for_testing 311 static base::LazyInstance<base::FilePath> master_prefs_path_for_testing
242 = LAZY_INSTANCE_INITIALIZER; 312 = LAZY_INSTANCE_INITIALIZER;
243 313
244 // TODO(gab): This will go back inline above when it is moved to first_run.cc
245 // (see TODO above), but needs to be separate for now to satisfy clang error:
246 // "[chromium-style] virtual methods with non-empty bodies shouldn't be declared
247 // inline".
248 void ImportEndedObserver::ImportEnded() {
249 ended_ = true;
250 if (should_quit_message_loop_)
251 MessageLoop::current()->Quit();
252 }
253
254 installer::MasterPreferences* 314 installer::MasterPreferences*
255 LoadMasterPrefs(base::FilePath* master_prefs_path) { 315 LoadMasterPrefs(base::FilePath* master_prefs_path) {
256 if (!master_prefs_path_for_testing.Get().empty()) 316 if (!master_prefs_path_for_testing.Get().empty())
257 *master_prefs_path = master_prefs_path_for_testing.Get(); 317 *master_prefs_path = master_prefs_path_for_testing.Get();
258 else 318 else
259 *master_prefs_path = base::FilePath(MasterPrefsPath()); 319 *master_prefs_path = base::FilePath(MasterPrefsPath());
260 if (master_prefs_path->empty()) 320 if (master_prefs_path->empty())
261 return NULL; 321 return NULL;
262 installer::MasterPreferences* install_prefs = 322 installer::MasterPreferences* install_prefs =
263 new installer::MasterPreferences(*master_prefs_path); 323 new installer::MasterPreferences(*master_prefs_path);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 &value) && value) { 407 &value) && value) {
348 out_prefs->make_chrome_default = true; 408 out_prefs->make_chrome_default = true;
349 } 409 }
350 410
351 if (install_prefs.GetBool( 411 if (install_prefs.GetBool(
352 installer::master_preferences::kSuppressFirstRunDefaultBrowserPrompt, 412 installer::master_preferences::kSuppressFirstRunDefaultBrowserPrompt,
353 &value) && value) { 413 &value) && value) {
354 out_prefs->suppress_first_run_default_browser_prompt = true; 414 out_prefs->suppress_first_run_default_browser_prompt = true;
355 } 415 }
356 416
417 install_prefs.GetString(
418 installer::master_preferences::kDistroImportBookmarksFromFilePref,
419 &out_prefs->import_bookmarks_path);
420
357 out_prefs->variations_seed = install_prefs.GetVariationsSeed(); 421 out_prefs->variations_seed = install_prefs.GetVariationsSeed();
358 422
359 install_prefs.GetString( 423 install_prefs.GetString(
360 installer::master_preferences::kDistroSuppressDefaultBrowserPromptPref, 424 installer::master_preferences::kDistroSuppressDefaultBrowserPromptPref,
361 &out_prefs->suppress_default_browser_prompt_for_version); 425 &out_prefs->suppress_default_browser_prompt_for_version);
362 } 426 }
363 427
364 void SetDefaultBrowser(installer::MasterPreferences* install_prefs){ 428 void SetDefaultBrowser(installer::MasterPreferences* install_prefs){
365 // Even on the first run we only allow for the user choice to take effect if 429 // Even on the first run we only allow for the user choice to take effect if
366 // no policy has been set by the admin. 430 // no policy has been set by the admin.
367 if (!g_browser_process->local_state()->IsManagedPreference( 431 if (!g_browser_process->local_state()->IsManagedPreference(
368 prefs::kDefaultBrowserSettingEnabled)) { 432 prefs::kDefaultBrowserSettingEnabled)) {
369 bool value = false; 433 bool value = false;
370 if (install_prefs->GetBool( 434 if (install_prefs->GetBool(
371 installer::master_preferences::kMakeChromeDefaultForUser, 435 installer::master_preferences::kMakeChromeDefaultForUser,
(...skipping 11 matching lines...) Expand all
383 // -- Platform-specific functions -- 447 // -- Platform-specific functions --
384 448
385 #if !defined(OS_LINUX) && !defined(OS_BSD) 449 #if !defined(OS_LINUX) && !defined(OS_BSD)
386 bool IsOrganicFirstRun() { 450 bool IsOrganicFirstRun() {
387 std::string brand; 451 std::string brand;
388 google_util::GetBrand(&brand); 452 google_util::GetBrand(&brand);
389 return google_util::IsOrganicFirstRun(brand); 453 return google_util::IsOrganicFirstRun(brand);
390 } 454 }
391 #endif 455 #endif
392 456
393 int ImportBookmarkFromFileIfNeeded(Profile* profile,
394 const CommandLine& cmdline) {
395 if (cmdline.HasSwitch(switches::kImportFromFile)) {
396 // Silently import preset bookmarks from file.
397 // This is an OEM scenario.
398 ImportFromFile(profile, cmdline);
399 }
400 // ImportBookmarkFromFileIfNeeded() will go away as part of
401 // http://crbug.com/219419, so it is fine to hardcode |true| for now.
402 return true;
403 }
404
405 } // namespace internal 457 } // namespace internal
406 } // namespace first_run 458 } // namespace first_run
407 459
408 namespace first_run { 460 namespace first_run {
409 461
410 MasterPrefs::MasterPrefs() 462 MasterPrefs::MasterPrefs()
411 : ping_delay(0), 463 : ping_delay(0),
412 homepage_defined(false), 464 homepage_defined(false),
413 do_import_items(0), 465 do_import_items(0),
414 dont_import_items(0), 466 dont_import_items(0),
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 bool retval = g_should_do_autofill_personal_data_manager_first_run; 542 bool retval = g_should_do_autofill_personal_data_manager_first_run;
491 g_should_do_autofill_personal_data_manager_first_run = false; 543 g_should_do_autofill_personal_data_manager_first_run = false;
492 return retval; 544 return retval;
493 } 545 }
494 546
495 void LogFirstRunMetric(FirstRunBubbleMetric metric) { 547 void LogFirstRunMetric(FirstRunBubbleMetric metric) {
496 UMA_HISTOGRAM_ENUMERATION("FirstRun.SearchEngineBubble", metric, 548 UMA_HISTOGRAM_ENUMERATION("FirstRun.SearchEngineBubble", metric,
497 NUM_FIRST_RUN_BUBBLE_METRICS); 549 NUM_FIRST_RUN_BUBBLE_METRICS);
498 } 550 }
499 551
500 namespace {
501 CommandLine* GetExtraArgumentsInstance() {
502 CR_DEFINE_STATIC_LOCAL(CommandLine, arguments, (CommandLine::NoProgram()));
503 return &arguments;
504 }
505 } // namespace
506
507 void SetExtraArgumentsForImportProcess(const CommandLine& arguments) {
508 GetExtraArgumentsInstance()->AppendArguments(arguments, false);
509 }
510
511 const CommandLine& GetExtraArgumentsForImportProcess() {
512 return *GetExtraArgumentsInstance();
513 }
514
515 // static 552 // static
516 void FirstRunBubbleLauncher::ShowFirstRunBubbleSoon() { 553 void FirstRunBubbleLauncher::ShowFirstRunBubbleSoon() {
517 SetShowFirstRunBubblePref(FIRST_RUN_BUBBLE_SHOW); 554 SetShowFirstRunBubblePref(FIRST_RUN_BUBBLE_SHOW);
518 // This FirstRunBubbleLauncher instance will manage its own lifetime. 555 // This FirstRunBubbleLauncher instance will manage its own lifetime.
519 new FirstRunBubbleLauncher(); 556 new FirstRunBubbleLauncher();
520 } 557 }
521 558
522 FirstRunBubbleLauncher::FirstRunBubbleLauncher() { 559 FirstRunBubbleLauncher::FirstRunBubbleLauncher() {
523 registrar_.Add(this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 560 registrar_.Add(this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
524 content::NotificationService::AllSources()); 561 content::NotificationService::AllSources());
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 if (!internal::ShowPostInstallEULAIfNeeded(install_prefs.get())) 663 if (!internal::ShowPostInstallEULAIfNeeded(install_prefs.get()))
627 return EULA_EXIT_NOW; 664 return EULA_EXIT_NOW;
628 665
629 if (!internal::CopyPrefFile(user_data_dir, master_prefs_path)) 666 if (!internal::CopyPrefFile(user_data_dir, master_prefs_path))
630 DLOG(ERROR) << "Failed to copy master_preferences to user data dir."; 667 DLOG(ERROR) << "Failed to copy master_preferences to user data dir.";
631 668
632 DoDelayedInstallExtensionsIfNeeded(install_prefs.get()); 669 DoDelayedInstallExtensionsIfNeeded(install_prefs.get());
633 670
634 internal::SetupMasterPrefsFromInstallPrefs(*install_prefs, out_prefs); 671 internal::SetupMasterPrefsFromInstallPrefs(*install_prefs, out_prefs);
635 672
636 internal::SetImportPreferencesAndLaunchImport(out_prefs,
637 install_prefs.get());
638
639 internal::SetDefaultBrowser(install_prefs.get()); 673 internal::SetDefaultBrowser(install_prefs.get());
640 } 674 }
641 675
642 return DO_FIRST_RUN_TASKS; 676 return DO_FIRST_RUN_TASKS;
643 } 677 }
644 678
645 void AutoImport( 679 void AutoImport(
646 Profile* profile, 680 Profile* profile,
647 bool homepage_defined, 681 bool homepage_defined,
648 int import_items, 682 int import_items,
649 int dont_import_items) { 683 int dont_import_items,
684 const std::string& import_bookmarks_path) {
650 #if !defined(USE_AURA) 685 #if !defined(USE_AURA)
651 scoped_refptr<ImporterHost> importer_host; 686 scoped_refptr<ImporterHost> importer_host;
652 // TODO(csilv,mirandac): Out-of-process import has only been qualified on 687 // TODO(csilv,mirandac): Out-of-process import has only been qualified on
653 // MacOS X, so we will only use it on that platform since it is required. 688 // MacOS X and Windows, so we will only use it on those platforms.
654 // Remove this conditional logic once oop import is qualified for 689 // Linux still uses the in-process import (http://crbug.com/56816).
655 // Linux/Windows. http://crbug.com/22142 690 #if defined(OS_MACOSX) || defined(OS_WIN)
656 #if defined(OS_MACOSX)
657 importer_host = new ExternalProcessImporterHost; 691 importer_host = new ExternalProcessImporterHost;
658 #else 692 #else
659 importer_host = new ImporterHost; 693 importer_host = new ImporterHost;
660 #endif 694 #endif
661 695
662 base::FilePath local_state_path; 696 base::FilePath local_state_path;
663 PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path); 697 PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path);
664 bool local_state_file_exists = file_util::PathExists(local_state_path); 698 bool local_state_file_exists = file_util::PathExists(local_state_path);
665 699
666 scoped_refptr<ImporterList> importer_list(new ImporterList(NULL)); 700 scoped_refptr<ImporterList> importer_list(new ImporterList(NULL));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 SetImportItem(user_prefs, 746 SetImportItem(user_prefs,
713 prefs::kImportBookmarks, 747 prefs::kImportBookmarks,
714 import_items, 748 import_items,
715 dont_import_items, 749 dont_import_items,
716 importer::FAVORITES, 750 importer::FAVORITES,
717 &items); 751 &items);
718 752
719 importer::LogImporterUseToMetrics( 753 importer::LogImporterUseToMetrics(
720 "AutoImport", importer_list->GetSourceProfileAt(0).importer_type); 754 "AutoImport", importer_list->GetSourceProfileAt(0).importer_type);
721 755
722 profile_import_exited_successfully = 756 ImportSettings(profile, importer_host, importer_list, items);
723 internal::ImportSettings(profile, importer_host, importer_list, items); 757 }
724 DCHECK(profile_import_exited_successfully); 758
759 if (!import_bookmarks_path.empty()) {
760 scoped_refptr<ImporterHost> file_importer_host;
761 // TODO(gab): Make Linux use OOP import as well (http://crbug.com/56816) and
762 // get rid of these ugly ifdefs.
763 #if defined(OS_MACOSX) || defined(OS_WIN)
764 file_importer_host = new ExternalProcessImporterHost;
765 #else
766 file_importer_host = new ImporterHost;
767 #endif
768 file_importer_host->set_headless();
769
770 ImportFromFile(profile, file_importer_host, import_bookmarks_path);
725 } 771 }
726 772
727 content::RecordAction(UserMetricsAction("FirstRunDef_Accept")); 773 content::RecordAction(UserMetricsAction("FirstRunDef_Accept"));
728 774
729 #endif // !defined(USE_AURA) 775 #endif // !defined(USE_AURA)
730 did_perform_profile_import = true; 776 g_auto_import_state |= AUTO_IMPORT_CALLED;
731 } 777 }
732 778
733 void DoPostImportTasks(Profile* profile, bool make_chrome_default) { 779 void DoPostImportTasks(Profile* profile, bool make_chrome_default) {
734 if (make_chrome_default && 780 if (make_chrome_default &&
735 ShellIntegration::CanSetAsDefaultBrowser() == 781 ShellIntegration::CanSetAsDefaultBrowser() ==
736 ShellIntegration::SET_DEFAULT_UNATTENDED) { 782 ShellIntegration::SET_DEFAULT_UNATTENDED) {
737 ShellIntegration::SetAsDefaultBrowser(); 783 ShellIntegration::SetAsDefaultBrowser();
738 } 784 }
739 785
740 base::FilePath local_state_path; 786 base::FilePath local_state_path;
(...skipping 10 matching lines...) Expand all
751 TemplateURLService* template_url = 797 TemplateURLService* template_url =
752 TemplateURLServiceFactory::GetForProfile(profile); 798 TemplateURLServiceFactory::GetForProfile(profile);
753 if (template_url && template_url->GetDefaultSearchProvider()) 799 if (template_url && template_url->GetDefaultSearchProvider())
754 FirstRunBubbleLauncher::ShowFirstRunBubbleSoon(); 800 FirstRunBubbleLauncher::ShowFirstRunBubbleSoon();
755 SetShouldShowWelcomePage(); 801 SetShouldShowWelcomePage();
756 SetShouldDoPersonalDataManagerFirstRun(); 802 SetShouldDoPersonalDataManagerFirstRun();
757 803
758 internal::DoPostImportPlatformSpecificTasks(); 804 internal::DoPostImportPlatformSpecificTasks();
759 } 805 }
760 806
761 bool DidPerformProfileImport(bool* exited_successfully) { 807 uint16 auto_import_state() {
762 if (exited_successfully) 808 return g_auto_import_state;
763 *exited_successfully = profile_import_exited_successfully;
764 return did_perform_profile_import;
765 } 809 }
766 810
767 } // namespace first_run 811 } // namespace first_run
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698