diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-21 21:49:05 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-21 21:49:05 +0000 |
commit | 1d8e4ce0743eed37a143d99e568c28abbe3202f1 (patch) | |
tree | ce8c850b2fa6d8a87f419255c368817c02f23a4f /chrome/browser/first_run_mac.mm | |
parent | f59a9c06d5cc9b7e0faace2b76582d3a12c3ec6c (diff) | |
download | chromium_src-1d8e4ce0743eed37a143d99e568c28abbe3202f1.zip chromium_src-1d8e4ce0743eed37a143d99e568c28abbe3202f1.tar.gz chromium_src-1d8e4ce0743eed37a143d99e568c28abbe3202f1.tar.bz2 |
Implement temporary First Run Dialog on OS X
We use a modal dialog with a single checkbox on OS X.
We use the OSX defaults system since we want something quick and reliable. The
dialog is displayed at a very early stage in Chrome startup (Before any
subsystems start relying on the stats variable). This means there are a few
quirks in displaying the UI.
A change was also needed to our event handling code since when the dialog is
shown we spin an event loop at a very early stage in the process lifetime.
Changed default value for stats to false and updated unit tests to reflect that.
Also some misc. minor cleanup.
BUG=11971,12046
Review URL: http://codereview.chromium.org/115608
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16669 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/first_run_mac.mm')
-rw-r--r-- | chrome/browser/first_run_mac.mm | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/chrome/browser/first_run_mac.mm b/chrome/browser/first_run_mac.mm new file mode 100644 index 0000000..41bc9a5 --- /dev/null +++ b/chrome/browser/first_run_mac.mm @@ -0,0 +1,54 @@ +// 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(!IsCrashReporterEnabled()); + + scoped_nsobject<FirstRunDialogController> 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(); + } +#endif // defined(GOOGLE_CHROME_BUILD) +} |