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

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

Issue 2868077: Fix Firefox import lock dialog on Windows.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 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
« no previous file with comments | « chrome/browser/first_run/first_run.h ('k') | chrome/browser/importer/importer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <windows.h> 7 #include <windows.h>
8 #include <shellapi.h> 8 #include <shellapi.h>
9 #include <shlobj.h> 9 #include <shlobj.h>
10 10
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 installer_util::GetDistroStringPreference(prefs.get(), 393 installer_util::GetDistroStringPreference(prefs.get(),
394 installer_util::master_preferences::kDistroImportBookmarksFromFilePref, 394 installer_util::master_preferences::kDistroImportBookmarksFromFilePref,
395 &import_bookmarks_path); 395 &import_bookmarks_path);
396 396
397 if (import_items || !import_bookmarks_path.empty()) { 397 if (import_items || !import_bookmarks_path.empty()) {
398 // There is something to import from the default browser. This launches 398 // There is something to import from the default browser. This launches
399 // the importer process and blocks until done or until it fails. 399 // the importer process and blocks until done or until it fails.
400 scoped_refptr<ImporterHost> importer_host = new ImporterHost(); 400 scoped_refptr<ImporterHost> importer_host = new ImporterHost();
401 if (!FirstRun::ImportSettings(NULL, 401 if (!FirstRun::ImportSettings(NULL,
402 importer_host->GetSourceProfileInfoAt(0).browser_type, 402 importer_host->GetSourceProfileInfoAt(0).browser_type,
403 import_items, FilePath(import_bookmarks_path), NULL)) { 403 import_items, FilePath(import_bookmarks_path), true, NULL)) {
404 LOG(WARNING) << "silent import failed"; 404 LOG(WARNING) << "silent import failed";
405 } 405 }
406 } 406 }
407 407
408 return false; 408 return false;
409 } 409 }
410 410
411 bool Upgrade::IsBrowserAlreadyRunning() { 411 bool Upgrade::IsBrowserAlreadyRunning() {
412 static HANDLE handle = NULL; 412 static HANDLE handle = NULL;
413 std::wstring exe; 413 std::wstring exe;
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 import_process_ = NULL; 575 import_process_ = NULL;
576 } 576 }
577 } 577 }
578 578
579 HWND owner_window_; 579 HWND owner_window_;
580 base::ProcessHandle import_process_; 580 base::ProcessHandle import_process_;
581 WorkerThreadTicker ticker_; 581 WorkerThreadTicker ticker_;
582 DISALLOW_COPY_AND_ASSIGN(HungImporterMonitor); 582 DISALLOW_COPY_AND_ASSIGN(HungImporterMonitor);
583 }; 583 };
584 584
585 std::string EncodeImportParams(int browser_type, int options, HWND window) { 585 std::string EncodeImportParams(int browser_type, int options,
586 return StringPrintf("%d@%d@%d", browser_type, options, window); 586 int skip_first_run_ui, HWND window) {
587 return StringPrintf("%d@%d@%d@%d", browser_type, options, skip_first_run_ui,
588 window);
587 } 589 }
588 590
589 bool DecodeImportParams(const std::string& encoded, 591 bool DecodeImportParams(const std::string& encoded, int* browser_type,
590 int* browser_type, int* options, HWND* window) { 592 int* options, int* skip_first_run_ui, HWND* window) {
591 std::vector<std::string> parts; 593 std::vector<std::string> parts;
592 SplitString(encoded, '@', &parts); 594 SplitString(encoded, '@', &parts);
593 if (parts.size() != 3) 595 if (parts.size() != 4)
594 return false; 596 return false;
595 597
596 if (!base::StringToInt(parts[0], browser_type)) 598 if (!base::StringToInt(parts[0], browser_type))
597 return false; 599 return false;
598 600
599 if (!base::StringToInt(parts[1], options)) 601 if (!base::StringToInt(parts[1], options))
600 return false; 602 return false;
601 603
604 if (!base::StringToInt(parts[2], skip_first_run_ui))
605 return false;
606
602 int64 window_int; 607 int64 window_int;
603 base::StringToInt64(parts[2], &window_int); 608 base::StringToInt64(parts[3], &window_int);
604 *window = reinterpret_cast<HWND>(window_int); 609 *window = reinterpret_cast<HWND>(window_int);
605 return true; 610 return true;
606 } 611 }
607 612
608 } // namespace 613 } // namespace
609 614
610 void FirstRun::AutoImport(Profile* profile, 615 void FirstRun::AutoImport(Profile* profile,
611 bool homepage_defined, 616 bool homepage_defined,
612 int import_items, 617 int import_items,
613 int dont_import_items, 618 int dont_import_items,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 // Set the first run bubble to minimal. 681 // Set the first run bubble to minimal.
677 FirstRun::SetMinimalFirstRunBubblePref(); 682 FirstRun::SetMinimalFirstRunBubblePref();
678 683
679 process_singleton->Unlock(); 684 process_singleton->Unlock();
680 FirstRun::CreateSentinel(); 685 FirstRun::CreateSentinel();
681 } 686 }
682 687
683 bool FirstRun::ImportSettings(Profile* profile, int browser_type, 688 bool FirstRun::ImportSettings(Profile* profile, int browser_type,
684 int items_to_import, 689 int items_to_import,
685 const FilePath& import_bookmarks_path, 690 const FilePath& import_bookmarks_path,
691 bool skip_first_run_ui,
686 HWND parent_window) { 692 HWND parent_window) {
687 const CommandLine& cmdline = *CommandLine::ForCurrentProcess(); 693 const CommandLine& cmdline = *CommandLine::ForCurrentProcess();
688 CommandLine import_cmd(cmdline.GetProgram()); 694 CommandLine import_cmd(cmdline.GetProgram());
689 695
690 const char* kSwitchNames[] = { 696 const char* kSwitchNames[] = {
691 switches::kUserDataDir, 697 switches::kUserDataDir,
692 switches::kChromeFrame, 698 switches::kChromeFrame,
693 switches::kCountry, 699 switches::kCountry,
694 }; 700 };
695 import_cmd.CopySwitchesFrom(cmdline, kSwitchNames, arraysize(kSwitchNames)); 701 import_cmd.CopySwitchesFrom(cmdline, kSwitchNames, arraysize(kSwitchNames));
696 702
697 // Since ImportSettings is called before the local state is stored on disk 703 // Since ImportSettings is called before the local state is stored on disk
698 // we pass the language as an argument. GetApplicationLocale checks the 704 // we pass the language as an argument. GetApplicationLocale checks the
699 // current command line as fallback. 705 // current command line as fallback.
700 import_cmd.AppendSwitchASCII(switches::kLang, 706 import_cmd.AppendSwitchASCII(switches::kLang,
701 g_browser_process->GetApplicationLocale()); 707 g_browser_process->GetApplicationLocale());
702 708
703 if (items_to_import) { 709 if (items_to_import) {
704 import_cmd.CommandLine::AppendSwitchASCII(switches::kImport, 710 import_cmd.CommandLine::AppendSwitchASCII(switches::kImport,
705 EncodeImportParams(browser_type, items_to_import, parent_window)); 711 EncodeImportParams(browser_type, items_to_import,
712 skip_first_run_ui ? 1 : 0, parent_window));
706 } 713 }
707 714
708 if (!import_bookmarks_path.empty()) { 715 if (!import_bookmarks_path.empty()) {
709 import_cmd.CommandLine::AppendSwitchPath( 716 import_cmd.CommandLine::AppendSwitchPath(
710 switches::kImportFromFile, import_bookmarks_path); 717 switches::kImportFromFile, import_bookmarks_path);
711 } 718 }
712 719
713 // Time to launch the process that is going to do the import. 720 // Time to launch the process that is going to do the import.
714 base::ProcessHandle import_process; 721 base::ProcessHandle import_process;
715 if (!base::LaunchApp(import_cmd, false, false, &import_process)) 722 if (!base::LaunchApp(import_cmd, false, false, &import_process))
(...skipping 14 matching lines...) Expand all
730 if (profile) 737 if (profile)
731 profile->GetPrefs()->ReloadPersistentPrefs(); 738 profile->GetPrefs()->ReloadPersistentPrefs();
732 739
733 return (import_runner.exit_code() == ResultCodes::NORMAL_EXIT); 740 return (import_runner.exit_code() == ResultCodes::NORMAL_EXIT);
734 } 741 }
735 742
736 bool FirstRun::ImportSettings(Profile* profile, int browser_type, 743 bool FirstRun::ImportSettings(Profile* profile, int browser_type,
737 int items_to_import, 744 int items_to_import,
738 HWND parent_window) { 745 HWND parent_window) {
739 return ImportSettings(profile, browser_type, items_to_import, 746 return ImportSettings(profile, browser_type, items_to_import,
740 FilePath(), parent_window); 747 FilePath(), false, parent_window);
741 } 748 }
742 749
743 int FirstRun::ImportFromBrowser(Profile* profile, 750 int FirstRun::ImportFromBrowser(Profile* profile,
744 const CommandLine& cmdline) { 751 const CommandLine& cmdline) {
745 std::string import_info = cmdline.GetSwitchValueASCII(switches::kImport); 752 std::string import_info = cmdline.GetSwitchValueASCII(switches::kImport);
746 if (import_info.empty()) { 753 if (import_info.empty()) {
747 NOTREACHED(); 754 NOTREACHED();
748 return false; 755 return false;
749 } 756 }
750 int browser_type = 0; 757 int browser_type = 0;
751 int items_to_import = 0; 758 int items_to_import = 0;
759 int skip_first_run_ui = 0;
752 HWND parent_window = NULL; 760 HWND parent_window = NULL;
753 if (!DecodeImportParams(import_info, &browser_type, &items_to_import, 761 if (!DecodeImportParams(import_info, &browser_type, &items_to_import,
754 &parent_window)) { 762 &skip_first_run_ui, &parent_window)) {
755 NOTREACHED(); 763 NOTREACHED();
756 return false; 764 return false;
757 } 765 }
758 scoped_refptr<ImporterHost> importer_host = new ImporterHost(); 766 scoped_refptr<ImporterHost> importer_host = new ImporterHost();
759 FirstRunImportObserver observer; 767 FirstRunImportObserver observer;
760 768
761 // If there is no parent window, we run in headless mode which amounts 769 // If |skip_first_run_ui|, we run in headless mode. This means that if
762 // to having the windows hidden and if there is user action required the 770 // there is user action required the import is automatically canceled.
763 // import is automatically canceled. 771 if (skip_first_run_ui > 0)
764 if (!parent_window)
765 importer_host->set_headless(); 772 importer_host->set_headless();
766 773
767 StartImportingWithUI( 774 StartImportingWithUI(
768 parent_window, 775 parent_window,
769 items_to_import, 776 items_to_import,
770 importer_host, 777 importer_host,
771 importer_host->GetSourceProfileInfoForBrowserType(browser_type), 778 importer_host->GetSourceProfileInfoForBrowserType(browser_type),
772 profile, 779 profile,
773 &observer, 780 &observer,
774 true); 781 true);
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 1064
1058 Upgrade::TryResult Upgrade::ShowTryChromeDialog(size_t version) { 1065 Upgrade::TryResult Upgrade::ShowTryChromeDialog(size_t version) {
1059 if (version > 10000) { 1066 if (version > 10000) {
1060 // This is a test value. We want to make sure we exercise 1067 // This is a test value. We want to make sure we exercise
1061 // returning this early. See EarlyReturnTest test harness. 1068 // returning this early. See EarlyReturnTest test harness.
1062 return Upgrade::TD_NOT_NOW; 1069 return Upgrade::TD_NOT_NOW;
1063 } 1070 }
1064 TryChromeDialog td; 1071 TryChromeDialog td;
1065 return td.ShowModal(); 1072 return td.ShowModal();
1066 } 1073 }
OLDNEW
« no previous file with comments | « chrome/browser/first_run/first_run.h ('k') | chrome/browser/importer/importer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698