Index: chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc |
=================================================================== |
--- chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc (revision 59251) |
+++ chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc (working copy) |
@@ -7,18 +7,45 @@ |
#include <stack> |
#include <vector> |
-#include "base/path_service.h" |
+#include "app/l10n_util.h" |
#include "base/utf_string_conversions.h" |
+#include "chrome/browser/browser_list.h" |
#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/chrome_thread.h" |
-#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/browser/notifications/desktop_notification_service.h" |
+#include "chrome/browser/notifications/notification.h" |
+#include "chrome/browser/notifications/notification_ui_manager.h" |
#include "chrome/browser/profile.h" |
-#include "chrome/browser/profile_manager.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/notification_type.h" |
-#include "chrome/common/pref_names.h" |
+#include "grit/generated_resources.h" |
-CloudPrintProxyService::CloudPrintProxyService(Profile* profile) { |
+// TODO(sanjeevr): Localize the product name? |
+const char kCloudPrintProductName[] = "Google Cloud Print"; |
+ |
+class CloudPrintProxyService::TokenExpiredNotificationDelegate |
+ : public NotificationDelegate { |
+ public: |
+ explicit TokenExpiredNotificationDelegate( |
+ CloudPrintProxyService* cloud_print_service) |
+ : cloud_print_service_(cloud_print_service) { |
+ } |
+ void Display() {} |
+ void Error() { |
+ cloud_print_service_->OnTokenExpiredNotificationError(); |
+ } |
+ void Close(bool by_user) { |
+ cloud_print_service_->OnTokenExpiredNotificationClosed(by_user); |
+ } |
+ void Click() { |
+ cloud_print_service_->OnTokenExpiredNotificationClick(); |
+ } |
+ std::string id() const { return "cloudprint.tokenexpired"; } |
+ |
+ private: |
+ CloudPrintProxyService* cloud_print_service_; |
+ DISALLOW_COPY_AND_ASSIGN(TokenExpiredNotificationDelegate); |
+}; |
+ |
+CloudPrintProxyService::CloudPrintProxyService(Profile* profile) |
+ : profile_(profile), token_expired_delegate_(NULL) { |
} |
CloudPrintProxyService::~CloudPrintProxyService() { |
@@ -43,3 +70,48 @@ |
// running in the service process here. |
} |
+bool CloudPrintProxyService::ShowTokenExpiredNotification() { |
+ // If we already have a pending notification, don't show another one. |
+ if (token_expired_delegate_.get()) |
+ return false; |
+ |
+ // TODO(sanjeevr): Get icon for this notification. |
+ GURL icon_url; |
+ |
+ string16 title = UTF8ToUTF16(kCloudPrintProductName); |
+ string16 message = |
+ l10n_util::GetStringUTF16(IDS_CLOUD_PRINT_TOKEN_EXPIRED_MESSAGE); |
+ string16 content_url = DesktopNotificationService::CreateDataUrl( |
+ icon_url, title, message, WebKit::WebTextDirectionDefault); |
+ token_expired_delegate_ = new TokenExpiredNotificationDelegate(this); |
+ Notification notification(GURL(), GURL(content_url), string16(), string16(), |
John Gregg
2010/09/21 23:57:55
just FYI, this notification will be shown without
|
+ token_expired_delegate_.get()); |
+ g_browser_process->notification_ui_manager()->Add(notification, profile_); |
+ // Keep the browser alive while we are showing the notification. |
+ BrowserList::StartKeepAlive(); |
+ return true; |
+} |
+ |
+void CloudPrintProxyService::OnTokenExpiredNotificationError() { |
+ TokenExpiredNotificationDone(); |
+} |
+ |
+void CloudPrintProxyService::OnTokenExpiredNotificationClosed(bool by_user) { |
+ TokenExpiredNotificationDone(); |
+} |
+ |
+void CloudPrintProxyService::OnTokenExpiredNotificationClick() { |
+ TokenExpiredNotificationDone(); |
+ // TODO(sanjeevr): Launch the cloud print setup flow. |
+} |
+ |
+void CloudPrintProxyService::TokenExpiredNotificationDone() { |
+ if (token_expired_delegate_.get()) { |
+ g_browser_process->notification_ui_manager()->Cancel( |
+ Notification(GURL(), GURL(), string16(), string16(), |
+ token_expired_delegate_.get())); |
+ token_expired_delegate_ = NULL; |
+ BrowserList::EndKeepAlive(); |
+ } |
+} |
+ |