Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / multi_profile_first_run_notification.cc
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.
4
5 #include "chrome/browser/chromeos/login/multi_profile_first_run_notification.h"
6
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"
21
22 using message_center::Notification;
23
24 namespace chromeos {
25
26 namespace {
27
28 const char kNotificationId[] = "chrome:://login/multiprofile";
29
30 class MultiProfileFirstRunNotificationDelegate
31     : public message_center::NotificationDelegate {
32  public:
33   explicit MultiProfileFirstRunNotificationDelegate(
34       const base::Closure& user_close_callback)
35       : user_close_callback_(user_close_callback) {}
36
37   // Overridden from message_center::NotificationDelegate:
38   virtual void Display() OVERRIDE {}
39   virtual void Error() OVERRIDE {}
40   virtual void Close(bool by_user) OVERRIDE {
41     if (by_user)
42       user_close_callback_.Run();
43   }
44   virtual void Click() OVERRIDE {}
45
46  protected:
47   virtual ~MultiProfileFirstRunNotificationDelegate() {}
48
49  private:
50   base::Closure user_close_callback_;
51
52   DISALLOW_COPY_AND_ASSIGN(MultiProfileFirstRunNotificationDelegate);
53 };
54
55 }  // namespace
56
57 MultiProfileFirstRunNotification::MultiProfileFirstRunNotification()
58     : weak_ptr_factory_(this) {}
59
60 MultiProfileFirstRunNotification::~MultiProfileFirstRunNotification() {}
61
62 // static
63 void MultiProfileFirstRunNotification::RegisterProfilePrefs(
64     user_prefs::PrefRegistrySyncable* registry) {
65   registry->RegisterBooleanPref(
66       prefs::kMultiProfileNotificationDismissed,
67       false,
68       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
69   registry->RegisterBooleanPref(
70       prefs::kMultiProfileNeverShowIntro,
71       false,
72       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
73   registry->RegisterBooleanPref(
74       prefs::kMultiProfileWarningShowDismissed,
75       false,
76       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
77 }
78
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)) {
85     return;
86   }
87
88   const base::string16 title;
89   const base::string16 display_source;
90   scoped_ptr<Notification> notification(new Notification(
91       message_center::NOTIFICATION_TYPE_SIMPLE,
92       kNotificationId,
93       title,
94       l10n_util::GetStringUTF16(IDS_MULTI_PROFILES_WARNING),
95       ui::ResourceBundle::GetSharedInstance().GetImageNamed(
96           IDR_NOTIFICATION_ALERT),
97       display_source,
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(),
105                      user_profile))));
106   notification->SetSystemPriority();
107   message_center::MessageCenter::Get()->AddNotification(notification.Pass());
108 }
109
110 void MultiProfileFirstRunNotification::OnDismissed(Profile* user_profile) {
111   user_profile->GetPrefs()->SetBoolean(
112       prefs::kMultiProfileNotificationDismissed, true);
113 }
114
115 }  // namespace chromeos