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

Unified Diff: chrome/browser/first_run/first_run.cc

Issue 3223010: Add search engine selection dialog for Mac.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/first_run/first_run.h ('k') | chrome/browser/first_run/first_run_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/first_run/first_run.cc
===================================================================
--- chrome/browser/first_run/first_run.cc (revision 60501)
+++ chrome/browser/first_run/first_run.cc (working copy)
@@ -461,8 +461,6 @@
MessageLoop::current()->Quit();
}
-// TODO(avi): port the relevant pieces and enable this.
-#if !defined(OS_MACOSX)
// static
void FirstRun::AutoImport(
Profile* profile,
@@ -487,7 +485,15 @@
bool local_state_file_exists = file_util::PathExists(local_state_path);
scoped_refptr<ImporterHost> importer_host;
- importer_host = new ImporterHost();
+ // TODO(csilv,mirandac): Out-of-process import has only been qualified on
+ // MacOS X, so we will only use it on that platform since it is required.
+ // Remove this conditional logic once oop import is qualified for
+ // Linux/Windows. http://crbug.com/22142
+#if defined(OS_MACOSX)
+ importer_host = new ExternalProcessImporterHost;
+#else
+ importer_host = new ImporterHost;
+#endif
// Do import if there is an available profile for us to import.
if (importer_host->GetAvailableProfileCount() > 0) {
// Don't show the warning dialog if import fails.
@@ -547,4 +553,73 @@
process_singleton->Unlock();
FirstRun::CreateSentinel();
}
-#endif // !defined(OS_MACOSX)
+
+#if defined(OS_POSIX)
+namespace {
+
+// This class acts as an observer for the ImporterHost::Observer::ImportEnded
+// callback. When the import process is started, certain errors may cause
+// ImportEnded() to be called synchronously, but the typical case is that
+// ImportEnded() is called asynchronously. Thus we have to handle both cases.
+class ImportEndedObserver : public ImporterHost::Observer {
+ public:
+ ImportEndedObserver() : ended_(false),
+ should_quit_message_loop_(false) {}
+ virtual ~ImportEndedObserver() {}
+
+ virtual void ImportItemStarted(importer::ImportItem item) {}
+ virtual void ImportItemEnded(importer::ImportItem item) {}
+ virtual void ImportStarted() {}
+ virtual void ImportEnded() {
+ ended_ = true;
+ if (should_quit_message_loop_)
+ MessageLoop::current()->Quit();
+ }
+
+ void set_should_quit_message_loop() {
+ should_quit_message_loop_ = true;
+ }
+
+ bool ended() {
+ return ended_;
+ }
+
+ private:
+ // Set if the import has ended.
+ bool ended_;
+
+ // Set by the client (via set_should_quit_message_loop) if, when the import
+ // ends, this class should quit the message loop.
+ bool should_quit_message_loop_;
+};
+
+} // namespace
+
+// static
+bool FirstRun::ImportSettings(Profile* profile,
+ scoped_refptr<ImporterHost> importer_host,
+ int items_to_import) {
+ const ProfileInfo& source_profile = importer_host->GetSourceProfileInfoAt(0);
+
+ // Ensure that importers aren't requested to import items that they do not
+ // support.
+ items_to_import &= source_profile.services_supported;
+
+ scoped_ptr<ImportEndedObserver> observer(new ImportEndedObserver);
+ importer_host->SetObserver(observer.get());
+ importer_host->StartImportSettings(source_profile,
+ profile,
+ items_to_import,
+ new ProfileWriter(profile),
+ true);
+ // If the import process has not errored out, block on it.
+ if (!observer->ended()) {
+ observer->set_should_quit_message_loop();
+ MessageLoop::current()->Run();
+ }
+
+ // Unfortunately there's no success/fail signal in ImporterHost.
+ return true;
+}
+
+#endif // OS_POSIX
« no previous file with comments | « chrome/browser/first_run/first_run.h ('k') | chrome/browser/first_run/first_run_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698