// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/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" #include "chrome/installer/util/google_update_constants.h" #include "chrome/installer/util/google_update_settings.h" // static bool FirstRun::IsChromeFirstRun() { // Use presence of kRegUsageStatsField key as an indicator of whether or not // this is the first run. // See chrome/browser/google_update_settings_mac.mm for details on why we use // the defualts dictionary here. NSUserDefaults* std_defaults = [NSUserDefaults standardUserDefaults]; NSDictionary* defaults_dict = [std_defaults dictionaryRepresentation]; NSString* collect_stats_key = base::SysWideToNSString( google_update::kRegUsageStatsField); bool not_in_dict = [defaults_dict objectForKey:collect_stats_key] == nil; return not_in_dict; } void OpenFirstRunDialog(Profile* profile, ProcessSingleton* process_singleton) { // OpenFirstRunDialog is a no-op on non-branded builds. #if defined(GOOGLE_CHROME_BUILD) // Breakpad should not be enabled on first run until the user has explicitly // opted-into stats. // TODO: The behavior we probably want here is to enable Breakpad on first run // but display a confirmation dialog before sending a crash report so we // respect a user's privacy while still getting any crashes that might happen // before this point. Then remove the need for that dialog here. DCHECK(IsCrashReporterDisabled()); scoped_nsobject dialog( [[FirstRunDialogController alloc] init]); bool stats_enabled = [dialog.get() Show]; GoogleUpdateSettings::SetCollectStatsConsent(stats_enabled); // Breakpad is normally enabled very early in the startup process, // however, on the first run it's off by default. If the user opts-in to // stats, enable breakpad. if (stats_enabled) { InitCrashReporter(); InitCrashProcessInfo(); } #endif // defined(GOOGLE_CHROME_BUILD) }