| Index: chrome/browser/first_run/first_run_mac.mm
|
| ===================================================================
|
| --- chrome/browser/first_run/first_run_mac.mm (revision 60501)
|
| +++ chrome/browser/first_run/first_run_mac.mm (working copy)
|
| @@ -5,110 +5,50 @@
|
| #include "chrome/browser/first_run/first_run.h"
|
|
|
| #import "base/scoped_nsobject.h"
|
| -#include "base/sys_string_conversions.h"
|
| #import "chrome/app/breakpad_mac.h"
|
| #import "chrome/browser/cocoa/first_run_dialog.h"
|
| -#import "chrome/browser/cocoa/import_progress_dialog.h"
|
| -#include "chrome/browser/importer/importer.h"
|
| -#include "chrome/browser/importer/importer_data_types.h"
|
| -#include "chrome/browser/metrics/user_metrics.h"
|
| +#import "chrome/browser/cocoa/search_engine_dialog_controller.h"
|
| +#include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/shell_integration.h"
|
| +#include "chrome/common/pref_names.h"
|
| #include "chrome/installer/util/google_update_constants.h"
|
| #include "chrome/installer/util/google_update_settings.h"
|
|
|
| -// Class that handles conducting the first run operation.
|
| -// FirstRunController deletes itself when the first run operation ends.
|
| -class FirstRunController : public ImportObserver {
|
| - public:
|
| - explicit FirstRunController();
|
| - virtual ~FirstRunController() {}
|
| +namespace {
|
|
|
| - // Overridden methods from ImportObserver.
|
| - virtual void ImportCanceled() {
|
| - FirstRunDone();
|
| - }
|
| - virtual void ImportComplete() {
|
| - FirstRunDone();
|
| - }
|
| +// Show the search engine selection dialog.
|
| +void ShowSearchEngineSelectionDialog(Profile* profile,
|
| + bool randomize_search_engine_experiment) {
|
| + scoped_nsobject<SearchEngineDialogController> dialog(
|
| + [[SearchEngineDialogController alloc] init]);
|
| + [dialog.get() setProfile:profile];
|
| + [dialog.get() setRandomize:randomize_search_engine_experiment];
|
|
|
| - // Display first run UI, start the import and return when it's all over.
|
| - bool DoFirstRun(Profile* profile, ProcessSingleton* process_singleton);
|
| -
|
| - private:
|
| - // This method closes the first run window and quits the message loop so that
|
| - // the Chrome startup can continue. This should be called when all the
|
| - // first run tasks are done.
|
| - void FirstRunDone();
|
| -
|
| - scoped_refptr<ImporterHost> importer_host_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FirstRunController);
|
| -};
|
| -
|
| -
|
| -bool OpenFirstRunDialog(Profile* profile,
|
| - bool homepage_defined,
|
| - int import_items,
|
| - int dont_import_items,
|
| - bool search_engine_experiment,
|
| - bool randomize_search_engine_experiment,
|
| - ProcessSingleton* process_singleton) {
|
| - FirstRunController* controller = new FirstRunController;
|
| - return controller->DoFirstRun(profile, process_singleton);
|
| + [dialog.get() showWindow:nil];
|
| }
|
|
|
| -FirstRunController::FirstRunController()
|
| - : importer_host_(new ExternalProcessImporterHost) {
|
| -}
|
| +// Show the first run UI.
|
| +void ShowFirstRun(Profile* profile) {
|
| +#if defined(GOOGLE_CHROME_BUILD)
|
| + // The purpose of the dialog is to ask the user to enable stats and crash
|
| + // reporting. This setting may be controlled through configuration management
|
| + // in enterprise scenarios. If that is the case, skip the dialog entirely, as
|
| + // it's not worth bothering the user for only the default browser question
|
| + // (which is likely to be forced in enterprise deployments anyway).
|
| + const PrefService::Preference* metrics_reporting_pref =
|
| + g_browser_process->local_state()->FindPreference(
|
| + prefs::kMetricsReportingEnabled);
|
| + if (!metrics_reporting_pref || !metrics_reporting_pref->IsManaged()) {
|
| + scoped_nsobject<FirstRunDialogController> dialog(
|
| + [[FirstRunDialogController alloc] init]);
|
|
|
| -void FirstRunController::FirstRunDone() {
|
| - // Set preference to show first run bubble and welcome page.
|
| - FirstRun::SetShowFirstRunBubblePref(true);
|
| - FirstRun::SetShowWelcomePagePref();
|
| -}
|
| + [dialog.get() showWindow:nil];
|
|
|
| -bool FirstRunController::DoFirstRun(Profile* profile,
|
| - ProcessSingleton* process_singleton) {
|
| - // This object is responsible for deleting itself, make sure that happens.
|
| - scoped_ptr<FirstRunController> gc(this);
|
| -
|
| - scoped_nsobject<FirstRunDialogController> dialog(
|
| - [[FirstRunDialogController alloc] init]);
|
| -
|
| - // Set list of browsers we know how to import.
|
| - ssize_t profiles_count = importer_host_->GetAvailableProfileCount();
|
| -
|
| - // TODO(jeremy): Test on newly created account.
|
| - // TODO(jeremy): Correctly handle case where no browsers to import from
|
| - // are detected.
|
| - NSMutableArray *browsers = [NSMutableArray arrayWithCapacity:profiles_count];
|
| - for (int i = 0; i < profiles_count; ++i) {
|
| - std::wstring profile = importer_host_->GetSourceProfileNameAt(i);
|
| - [browsers addObject:base::SysWideToNSString(profile)];
|
| - }
|
| - [dialog.get() setBrowserImportList:browsers];
|
| -
|
| - BOOL browser_import_disabled = profiles_count == 0;
|
| - [dialog.get() setBrowserImportListHidden:browser_import_disabled];
|
| -
|
| - // FirstRunDialogController will call exit if "Cancel" is clicked.
|
| - [dialog.get() showWindow:nil];
|
| -
|
| - // If user clicked cancel, bail - browser_main will return if we haven't
|
| - // turned off the first run flag when this function returns.
|
| - if ([dialog.get() userDidCancel]) {
|
| - return false;
|
| - }
|
| -
|
| - FirstRun::CreateSentinel();
|
| -
|
| - // If the dialog asked the user to opt-in for stats and crash reporting,
|
| - // record the decision and enable the crash reporter if appropriate.
|
| - if (![dialog.get() statsCheckboxHidden]) {
|
| + // If the dialog asked the user to opt-in for stats and crash reporting,
|
| + // record the decision and enable the crash reporter if appropriate.
|
| bool stats_enabled = [dialog.get() statsEnabled];
|
| GoogleUpdateSettings::SetCollectStatsConsent(stats_enabled);
|
|
|
| -#if defined(GOOGLE_CHROME_BUILD)
|
| // Breakpad is normally enabled very early in the startup process. However,
|
| // on the first run it may not have been enabled due to the missing opt-in
|
| // from the user. If the user agreed now, enable breakpad if necessary.
|
| @@ -116,33 +56,48 @@
|
| InitCrashReporter();
|
| InitCrashProcessInfo();
|
| }
|
| -#endif // GOOGLE_CHROME_BUILD
|
| - }
|
|
|
| - // If selected set as default browser.
|
| - BOOL make_default_browser = [dialog.get() makeDefaultBrowser];
|
| - if (make_default_browser) {
|
| - bool success = ShellIntegration::SetAsDefaultBrowser();
|
| - DCHECK(success);
|
| + // If selected set as default browser.
|
| + BOOL make_default_browser = [dialog.get() makeDefaultBrowser];
|
| + if (make_default_browser) {
|
| + bool success = ShellIntegration::SetAsDefaultBrowser();
|
| + DCHECK(success);
|
| + }
|
| }
|
| +#else // GOOGLE_CHROME_BUILD
|
| + // We don't show the dialog in Chromium.
|
| +#endif // GOOGLE_CHROME_BUILD
|
|
|
| - // Import bookmarks.
|
| - if (!browser_import_disabled && [dialog.get() importBookmarks]) {
|
| - const importer::ProfileInfo& source_profile = importer_host_->
|
| - GetSourceProfileInfoAt([dialog.get() browserImportSelectedIndex]);
|
| - int16 items = source_profile.services_supported;
|
| - // TODO(port): Do the actual import in a new process like Windows.
|
| - ignore_result(gc.release());
|
| - StartImportingWithUI(nil, items, importer_host_.get(),
|
| - source_profile, profile, this, true);
|
| - } else {
|
| - // This is called by the importer if it runs.
|
| - FirstRunDone();
|
| - }
|
| + FirstRun::CreateSentinel();
|
|
|
| - return true;
|
| + // Set preference to show first run bubble and welcome page.
|
| + FirstRun::SetShowFirstRunBubblePref(true);
|
| + FirstRun::SetShowWelcomePagePref();
|
| }
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +void FirstRun::ShowFirstRunDialog(Profile* profile,
|
| + bool randomize_search_engine_experiment) {
|
| + ShowSearchEngineSelectionDialog(profile,
|
| + randomize_search_engine_experiment);
|
| + ShowFirstRun(profile);
|
| +}
|
| +
|
| bool FirstRun::ImportBookmarks(const FilePath& import_bookmarks_path) {
|
| // http://crbug.com/48880
|
| return false;
|
| }
|
| +
|
| +// static
|
| +bool FirstRun::IsOrganic() {
|
| + // We treat all installs as organic.
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +void FirstRun::PlatformSetup() {
|
| + // Things that Windows does here (creating a desktop icon, for example) are
|
| + // not needed.
|
| +}
|
|
|