1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/login/multi_profile_first_run_notification.h"
7 #include "ash/system/system_notifier.h"
8 #include "base/prefs/pref_service.h"
9 #include "base/strings/string16.h"
10 #include "chrome/browser/chromeos/login/user_manager.h"
11 #include "chrome/browser/prefs/pref_service_syncable.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/common/pref_names.h"
14 #include "grit/generated_resources.h"
15 #include "grit/theme_resources.h"
16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/message_center/message_center.h"
19 #include "ui/message_center/notification.h"
20 #include "ui/message_center/notification_delegate.h"
22 using message_center::Notification;
28 const char kNotificationId[] = "chrome:://login/multiprofile";
30 class MultiProfileFirstRunNotificationDelegate
31 : public message_center::NotificationDelegate {
33 explicit MultiProfileFirstRunNotificationDelegate(
34 const base::Closure& user_close_callback)
35 : user_close_callback_(user_close_callback) {}
37 // Overridden from message_center::NotificationDelegate:
38 virtual void Display() OVERRIDE {}
39 virtual void Error() OVERRIDE {}
40 virtual void Close(bool by_user) OVERRIDE {
42 user_close_callback_.Run();
44 virtual void Click() OVERRIDE {}
47 virtual ~MultiProfileFirstRunNotificationDelegate() {}
50 base::Closure user_close_callback_;
52 DISALLOW_COPY_AND_ASSIGN(MultiProfileFirstRunNotificationDelegate);
57 MultiProfileFirstRunNotification::MultiProfileFirstRunNotification()
58 : weak_ptr_factory_(this) {}
60 MultiProfileFirstRunNotification::~MultiProfileFirstRunNotification() {}
63 void MultiProfileFirstRunNotification::RegisterProfilePrefs(
64 user_prefs::PrefRegistrySyncable* registry) {
65 registry->RegisterBooleanPref(
66 prefs::kMultiProfileNotificationDismissed,
68 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
69 registry->RegisterBooleanPref(
70 prefs::kMultiProfileNeverShowIntro,
72 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
73 registry->RegisterBooleanPref(
74 prefs::kMultiProfileWarningShowDismissed,
76 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
79 void MultiProfileFirstRunNotification::UserProfilePrepared(
80 Profile* user_profile) {
81 if (!UserManager::IsMultipleProfilesAllowed() ||
82 UserManager::Get()->GetLoggedInUsers().size() > 1 ||
83 user_profile->GetPrefs()->GetBoolean(
84 prefs::kMultiProfileNotificationDismissed)) {
88 const base::string16 title;
89 const base::string16 display_source;
90 scoped_ptr<Notification> notification(new Notification(
91 message_center::NOTIFICATION_TYPE_SIMPLE,
94 l10n_util::GetStringUTF16(IDS_MULTI_PROFILES_WARNING),
95 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
96 IDR_NOTIFICATION_ALERT),
98 message_center::NotifierId(
99 message_center::NotifierId::SYSTEM_COMPONENT,
100 ash::system_notifier::kNotifierMultiProfileFirstRun),
101 message_center::RichNotificationData(),
102 new MultiProfileFirstRunNotificationDelegate(
103 base::Bind(&MultiProfileFirstRunNotification::OnDismissed,
104 weak_ptr_factory_.GetWeakPtr(),
106 notification->SetSystemPriority();
107 message_center::MessageCenter::Get()->AddNotification(notification.Pass());
110 void MultiProfileFirstRunNotification::OnDismissed(Profile* user_profile) {
111 user_profile->GetPrefs()->SetBoolean(
112 prefs::kMultiProfileNotificationDismissed, true);
115 } // namespace chromeos