If default browser is set to FF, and Chrome is run as first-run with an empty profile, import ignores FF data and imports from Safari instead.

BUG=61112
TEST=see bug.
Review URL: http://codereview.chromium.org/4206002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64298 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/cocoa/search_engine_dialog_controller.h b/chrome/browser/cocoa/search_engine_dialog_controller.h
index a410614..0cc06f2 100644
--- a/chrome/browser/cocoa/search_engine_dialog_controller.h
+++ b/chrome/browser/cocoa/search_engine_dialog_controller.h
@@ -6,6 +6,7 @@
 
 #include <vector>
 
+#import "base/ref_counted.h"
 #import "base/scoped_nsobject.h"
 #include "base/scoped_ptr.h"
 
@@ -27,7 +28,7 @@
   TemplateURLModel* searchEnginesModel_;
 
   // Bridge to the C++ world.
-  scoped_ptr<SearchEngineDialogControllerBridge> bridge_;
+  scoped_refptr<SearchEngineDialogControllerBridge> bridge_;
 
   // Offered search engine choices.
   std::vector<const TemplateURL*> choices_;
diff --git a/chrome/browser/cocoa/search_engine_dialog_controller.mm b/chrome/browser/cocoa/search_engine_dialog_controller.mm
index 044bb589..0888050 100644
--- a/chrome/browser/cocoa/search_engine_dialog_controller.mm
+++ b/chrome/browser/cocoa/search_engine_dialog_controller.mm
@@ -40,7 +40,9 @@
 - (IBAction)searchEngineSelected:(id)sender;
 @end
 
-class SearchEngineDialogControllerBridge : public TemplateURLModelObserver {
+class SearchEngineDialogControllerBridge :
+    public base::RefCounted<SearchEngineDialogControllerBridge>,
+    public TemplateURLModelObserver {
  public:
   SearchEngineDialogControllerBridge(SearchEngineDialogController* controller);
 
@@ -71,7 +73,7 @@
                                           ofType:@"nib"];
   self = [super initWithWindowNibPath:nibpath owner:self];
   if (self != nil) {
-    bridge_.reset(new SearchEngineDialogControllerBridge(self));
+    bridge_ = new SearchEngineDialogControllerBridge(self);
   }
   return self;
 }
@@ -85,11 +87,15 @@
   searchEnginesModel_->AddObserver(bridge_.get());
 
   if (searchEnginesModel_->loaded()) {
-    [self onTemplateURLModelChanged];
+    MessageLoop::current()->PostTask(
+        FROM_HERE,
+        NewRunnableMethod(
+            bridge_.get(),
+            &SearchEngineDialogControllerBridge::OnTemplateURLModelChanged));
   } else {
     searchEnginesModel_->Load();
-    MessageLoop::current()->Run();
   }
+  MessageLoop::current()->Run();
 }
 
 - (void)onTemplateURLModelChanged {
diff --git a/chrome/browser/importer/importer_list.cc b/chrome/browser/importer/importer_list.cc
index f529284c..6ac65174 100644
--- a/chrome/browser/importer/importer_list.cc
+++ b/chrome/browser/importer/importer_list.cc
@@ -35,9 +35,9 @@
 }
 
 void ImporterList::DetectSourceProfiles() {
+// The first run import will automatically take settings from the first
+// profile detected, which should be the user's current default.
 #if defined(OS_WIN)
-  // The order in which detect is called determines the order
-  // in which the options appear in the dropdown combo-box
   if (ShellIntegration::IsFirefoxDefaultBrowser()) {
     DetectFirefoxProfiles();
     DetectIEProfiles();
@@ -47,10 +47,15 @@
   }
   // TODO(brg) : Current UI requires win_util.
   DetectGoogleToolbarProfiles();
+#elif defined(OS_MACOSX)
+  if (ShellIntegration::IsFirefoxDefaultBrowser()) {
+    DetectFirefoxProfiles();
+    DetectSafariProfiles();
+  } else {
+    DetectSafariProfiles();
+    DetectFirefoxProfiles();
+  }
 #else
-#if defined(OS_MACOSX)
-  DetectSafariProfiles();
-#endif
   DetectFirefoxProfiles();
 #endif
 }