summaryrefslogtreecommitdiffstats
path: root/chrome/browser/first_run_mac.mm
diff options
context:
space:
mode:
authorjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-21 21:49:05 +0000
committerjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-21 21:49:05 +0000
commit1d8e4ce0743eed37a143d99e568c28abbe3202f1 (patch)
treece8c850b2fa6d8a87f419255c368817c02f23a4f /chrome/browser/first_run_mac.mm
parentf59a9c06d5cc9b7e0faace2b76582d3a12c3ec6c (diff)
downloadchromium_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.mm54
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)
+}