Index: chrome/browser/chromeos/policy/consumer_management_notifier.cc |
diff --git a/chrome/browser/chromeos/policy/consumer_management_notifier.cc b/chrome/browser/chromeos/policy/consumer_management_notifier.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4b56f56de73bc9b393d3604dacf024855e19c4d1 |
--- /dev/null |
+++ b/chrome/browser/chromeos/policy/consumer_management_notifier.cc |
@@ -0,0 +1,172 @@ |
+// Copyright 2014 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/chromeos/policy/consumer_management_notifier.h" |
+ |
+#include "base/bind.h" |
+#include "base/callback.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/notifications/notification.h" |
+#include "chrome/browser/notifications/notification_delegate.h" |
+#include "chrome/browser/notifications/notification_ui_manager.h" |
+#include "chrome/browser/ui/browser_navigator.h" |
+#include "chrome/common/url_constants.h" |
+#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
+#include "third_party/WebKit/public/web/WebTextDirection.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/page_transition_types.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/base/window_open_disposition.h" |
+#include "ui/message_center/notifier_settings.h" |
+#include "url/gurl.h" |
+ |
+namespace { |
+ |
+// Desktop notification constants. |
+const char kEnrollmentNotificationId[] = "consumer_management.enroll"; |
+const char kEnrollmentNotificationUrl[] = "chrome://consumer-management/enroll"; |
+ |
+// The path to the consumer management enrollment/unenrollment confirmation |
+// overlay, relative to the settings page URL. |
+const char kConsumerManagementOverlay[] = "consumer-management-overlay"; |
+ |
+class DesktopNotificationDelegate : public NotificationDelegate { |
+ public: |
+ // |button_click_callback| is called when the button in the notification is |
+ // clicked. |
+ DesktopNotificationDelegate(const std::string& id, |
bartfab (slow)
2014/11/27 14:09:09
Nit: #include <string>
davidyu
2014/11/28 02:45:25
Done.
|
+ const base::Closure& button_click_callback); |
+ |
+ // NotificationDelegate: |
+ virtual std::string id() const override; |
bartfab (slow)
2014/11/27 14:09:09
Nit: No |virtual| with |override|.
davidyu
2014/11/28 02:45:25
Done.
|
+ virtual void ButtonClick(int button_index) override; |
bartfab (slow)
2014/11/27 14:09:09
Nit: No |virtual| with |override|.
davidyu
2014/11/28 02:45:26
Done.
|
+ |
+ private: |
+ virtual ~DesktopNotificationDelegate(); |
bartfab (slow)
2014/11/27 14:09:09
Nit: Use |override| instead of |virtual|.
davidyu
2014/11/28 02:45:26
Done.
|
+ |
+ std::string id_; |
bartfab (slow)
2014/11/27 14:09:09
Nit: const.
davidyu
2014/11/28 02:45:25
Done.
|
+ base::Closure button_click_callback_; |
bartfab (slow)
2014/11/27 14:09:09
Nit: const.
davidyu
2014/11/28 02:45:26
Done.
|
+ |
+ DISALLOW_COPY_AND_ASSIGN(DesktopNotificationDelegate); |
+}; |
+ |
+DesktopNotificationDelegate::DesktopNotificationDelegate( |
+ const std::string& id, |
+ const base::Closure& button_click_callback) |
+ : id_(id), button_click_callback_(button_click_callback) { |
+} |
+ |
+DesktopNotificationDelegate::~DesktopNotificationDelegate() { |
+} |
+ |
+std::string DesktopNotificationDelegate::id() const { |
+ return id_; |
+} |
+ |
+void DesktopNotificationDelegate::ButtonClick(int button_index) { |
+ button_click_callback_.Run(); |
+} |
+ |
+} // namespace |
+ |
+namespace policy { |
+ |
+ConsumerManagementNotifier::ConsumerManagementNotifier( |
+ Profile* profile, |
+ ConsumerManagementService* consumer_management_service) |
+ : profile_(profile), |
+ consumer_management_service_(consumer_management_service), |
+ weak_ptr_factory_(this) { |
+ consumer_management_service_->AddObserver(this); |
+ OnConsumerManagementStatusChanged(); |
+} |
+ |
+ConsumerManagementNotifier::~ConsumerManagementNotifier() { |
+} |
+ |
+void ConsumerManagementNotifier::Shutdown() { |
+ consumer_management_service_->RemoveObserver(this); |
+} |
+ |
+void ConsumerManagementNotifier::OnConsumerManagementStatusChanged() { |
+ if (consumer_management_service_->HasPendingEnrollmentNotification()) { |
+ ConsumerManagementService::EnrollmentStage stage = |
bartfab (slow)
2014/11/27 14:09:09
Nit: const.
davidyu
2014/11/28 02:45:25
Done.
|
+ consumer_management_service_->GetEnrollmentStage(); |
+ // Reset the enrollment stage so that we won't show the same notification, |
+ // again. |
+ consumer_management_service_->SetEnrollmentStage( |
+ ConsumerManagementService::ENROLLMENT_STAGE_NONE); |
+ ShowDesktopNotification(stage); |
+ } |
+} |
+ |
+void ConsumerManagementNotifier::ShowDesktopNotification( |
+ ConsumerManagementService::EnrollmentStage stage) { |
+ base::string16 title; |
bartfab (slow)
2014/11/27 14:09:09
Nit: #include "base/strings/string16.h"
davidyu
2014/11/28 02:45:25
Done.
|
+ base::string16 body; |
+ base::string16 button_label; |
+ base::Closure button_click_callback; |
+ |
+ if (stage == ConsumerManagementService::ENROLLMENT_STAGE_SUCCESS) { |
+ title = l10n_util::GetStringUTF16( |
+ IDS_CONSUMER_MANAGEMENT_ENROLLMENT_NOTIFICATION_TITLE); |
+ body = l10n_util::GetStringUTF16( |
+ IDS_CONSUMER_MANAGEMENT_ENROLLMENT_NOTIFICATION_BODY); |
+ button_label = l10n_util::GetStringUTF16( |
+ IDS_CONSUMER_MANAGEMENT_NOTIFICATION_MODIFY_SETTINGS_BUTTON); |
+ button_click_callback = base::Bind( |
+ &ConsumerManagementNotifier::OpenSettingsPage, |
+ weak_ptr_factory_.GetWeakPtr()); |
+ } else { |
+ title = l10n_util::GetStringUTF16( |
+ IDS_CONSUMER_MANAGEMENT_ENROLLMENT_FAILURE_NOTIFICATION_TITLE); |
+ body = l10n_util::GetStringUTF16( |
+ IDS_CONSUMER_MANAGEMENT_ENROLLMENT_FAILURE_NOTIFICATION_BODY); |
+ button_label = l10n_util::GetStringUTF16( |
+ IDS_CONSUMER_MANAGEMENT_NOTIFICATION_TRY_AGAIN_BUTTON); |
+ button_click_callback = base::Bind( |
+ &ConsumerManagementNotifier::TryEnrollmentAgain, |
+ weak_ptr_factory_.GetWeakPtr()); |
+ } |
+ |
+ message_center::RichNotificationData optional_field; |
+ optional_field.buttons.push_back(message_center::ButtonInfo(button_label)); |
+ Notification notification( |
+ message_center::NOTIFICATION_TYPE_SIMPLE, |
bartfab (slow)
2014/11/27 14:09:09
Nit: #include "ui/message_center/notification_type
davidyu
2014/11/28 02:45:25
Done.
|
+ GURL(kEnrollmentNotificationUrl), |
+ title, |
+ body, |
+ ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
+ IDR_CONSUMER_MANAGEMENT_NOTIFICATION_ICON), |
+ blink::WebTextDirectionDefault, |
+ message_center::NotifierId(message_center::NotifierId::SYSTEM_COMPONENT, |
+ kEnrollmentNotificationId), |
+ base::string16(), // display_source |
+ base::UTF8ToUTF16(kEnrollmentNotificationId), |
+ optional_field, |
+ new DesktopNotificationDelegate(kEnrollmentNotificationId, |
+ button_click_callback)); |
+ notification.SetSystemPriority(); |
+ g_browser_process->notification_ui_manager()->Add(notification, profile_); |
+} |
+ |
+void ConsumerManagementNotifier::OpenSettingsPage() const { |
+ const GURL url(chrome::kChromeUISettingsURL); |
+ chrome::NavigateParams params(profile_, url, ui::PAGE_TRANSITION_LINK); |
+ params.disposition = NEW_FOREGROUND_TAB; |
+ chrome::Navigate(¶ms); |
+} |
+ |
+void ConsumerManagementNotifier::TryEnrollmentAgain() const { |
+ const GURL base_url(chrome::kChromeUISettingsURL); |
+ const GURL url = base_url.Resolve(kConsumerManagementOverlay); |
+ |
+ chrome::NavigateParams params(profile_, url, ui::PAGE_TRANSITION_LINK); |
+ params.disposition = NEW_FOREGROUND_TAB; |
+ chrome::Navigate(¶ms); |
+} |
+ |
+} // namespace policy |