Chromium Code Reviews| Index: chrome/browser/notifications/notification_ui_manager_android.cc |
| diff --git a/chrome/browser/notifications/notification_ui_manager_android.cc b/chrome/browser/notifications/notification_ui_manager_android.cc |
| index aa5984cf9515cb91bc8f980498f6da65da1cd80b..e15dfa894f1c9dc37d5a3c388caefd09854770a2 100644 |
| --- a/chrome/browser/notifications/notification_ui_manager_android.cc |
| +++ b/chrome/browser/notifications/notification_ui_manager_android.cc |
| @@ -14,7 +14,6 @@ |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/persistent_notification_delegate.h" |
| #include "chrome/browser/notifications/platform_notification_service_impl.h" |
| -#include "chrome/browser/notifications/profile_notification.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "content/public/common/persistent_notification_status.h" |
| #include "content/public/common/platform_notification_data.h" |
| @@ -27,19 +26,6 @@ using base::android::ConvertJavaStringToUTF8; |
| using base::android::ConvertUTF16ToJavaString; |
| using base::android::ConvertUTF8ToJavaString; |
| -namespace { |
| - |
| -// Called when the "notificationclick" event in the Service Worker has finished |
| -// executing for a notification that was created in a previous instance of the |
| -// browser. |
| -void OnEventDispatchComplete(content::PersistentNotificationStatus status) { |
| - // TODO(peter): Add UMA statistics based on |status|. |
| - // TODO(peter): Decide if we want to forcefully shut down the browser process |
|
johnme
2015/04/09 17:00:01
This TODO seems to have gotten lost?
Peter Beverloo
2015/04/09 17:34:42
It's still captured in NotificationService.java:91
|
| - // if we're confident it was created for delivering this event. |
| -} |
| - |
| -} // namespace |
| - |
| // Called by the Java side when a notification event has been received, but the |
| // NotificationUIManager has not been initialized yet. Enforce initialization of |
| // the class. |
| @@ -83,8 +69,7 @@ bool NotificationUIManagerAndroid::OnNotificationClicked( |
| PlatformNotificationServiceImpl::GetInstance()->OnPersistentNotificationClick( |
| ProfileManager::GetLastUsedProfile(), |
| persistent_notification_id, |
| - origin, |
| - base::Bind(&OnEventDispatchComplete)); |
| + origin); |
| return true; |
| } |
| @@ -102,22 +87,15 @@ bool NotificationUIManagerAndroid::OnNotificationClosed( |
| void NotificationUIManagerAndroid::Add(const Notification& notification, |
| Profile* profile) { |
| - // If the given notification is replacing an older one, drop its associated |
| - // profile notification object without closing the platform notification. |
| - // We'll use the native Android system to perform a smoother replacement. |
| - ProfileNotification* notification_to_replace = |
| - FindNotificationToReplace(notification, profile); |
| - if (notification_to_replace) |
| - RemoveProfileNotification(notification_to_replace, false /* close */); |
| - |
| - ProfileNotification* profile_notification = |
| - new ProfileNotification(profile, notification); |
| - |
| - // Takes ownership of |profile_notification|. |
| - AddProfileNotification(profile_notification); |
| - |
| JNIEnv* env = AttachCurrentThread(); |
| + // The Android notification UI manager only supports Web Notifications, which |
| + // have a PersistentNotificationDelegate. The persistent id of the |
| + // notification is exposed through it's interface. |
| + // |
| + // TODO(peter): When content/ passes a message_center::Notification to the |
| + // chrome/ layer, the persistent notification id should be captured as a |
| + // property on that object instead, making this cast unnecessary. |
| PersistentNotificationDelegate* delegate = |
| static_cast<PersistentNotificationDelegate*>(notification.delegate()); |
| DCHECK(delegate); |
| @@ -159,8 +137,6 @@ void NotificationUIManagerAndroid::Add(const Notification& notification, |
| bool NotificationUIManagerAndroid::Update(const Notification& notification, |
| Profile* profile) { |
| - // This method is currently only called from extensions and local discovery, |
| - // both of which are not supported on Android. |
| NOTIMPLEMENTED(); |
| return false; |
| } |
| @@ -168,115 +144,23 @@ bool NotificationUIManagerAndroid::Update(const Notification& notification, |
| const Notification* NotificationUIManagerAndroid::FindById( |
| const std::string& delegate_id, |
| ProfileID profile_id) const { |
| - std::string profile_notification_id = |
| - ProfileNotification::GetProfileNotificationId(delegate_id, profile_id); |
| - ProfileNotification* profile_notification = |
| - FindProfileNotification(profile_notification_id); |
| - if (!profile_notification) |
| - return 0; |
| - |
| - return &profile_notification->notification(); |
| + NOTIMPLEMENTED(); |
| + return nullptr; |
| } |
| bool NotificationUIManagerAndroid::CancelById(const std::string& delegate_id, |
| ProfileID profile_id) { |
| - std::string profile_notification_id = |
| - ProfileNotification::GetProfileNotificationId(delegate_id, profile_id); |
| - ProfileNotification* profile_notification = |
| - FindProfileNotification(profile_notification_id); |
| - if (profile_notification) { |
| - RemoveProfileNotification(profile_notification, true /* close */); |
| - return true; |
| - } |
| - |
| - // On Android, it's still possible that the notification can be closed in case |
| - // the platform Id is known, even if no delegate exists. This happens when the |
| - // browser process is started because of interaction with a Notification. |
| - PlatformCloseNotification(delegate_id); |
| - return true; |
| -} |
| - |
| -std::set<std::string> |
| -NotificationUIManagerAndroid::GetAllIdsByProfileAndSourceOrigin( |
| - Profile* profile, |
| - const GURL& source) { |
| - // |profile| may be invalid, so no calls must be made based on the instance. |
| - std::set<std::string> delegate_ids; |
| - |
| - for (auto iterator : profile_notifications_) { |
| - ProfileNotification* profile_notification = iterator.second; |
| - if (profile_notification->notification().origin_url() == source && |
| - profile_notification->profile() == profile) |
| - delegate_ids.insert(profile_notification->notification().id()); |
| - } |
| - |
| - return delegate_ids; |
| -} |
| - |
| -bool NotificationUIManagerAndroid::CancelAllBySourceOrigin( |
| - const GURL& source_origin) { |
| - bool removed = true; |
| - |
| - for (auto iterator = profile_notifications_.begin(); |
| - iterator != profile_notifications_.end();) { |
| - auto current_iterator = iterator++; |
| - |
| - ProfileNotification* profile_notification = current_iterator->second; |
| - if (profile_notification->notification().origin_url() == source_origin) { |
| - RemoveProfileNotification(profile_notification, true /* close */); |
| - removed = true; |
| - } |
| - } |
| - |
| - return removed; |
| -} |
| - |
| -bool NotificationUIManagerAndroid::CancelAllByProfile(ProfileID profile_id) { |
| - bool removed = true; |
| - |
| - for (auto iterator = profile_notifications_.begin(); |
| - iterator != profile_notifications_.end();) { |
| - auto current_iterator = iterator++; |
| - |
| - ProfileNotification* profile_notification = current_iterator->second; |
| - ProfileID current_profile_id = |
| - NotificationUIManager::GetProfileID(profile_notification->profile()); |
| - if (current_profile_id == profile_id) { |
| - RemoveProfileNotification(profile_notification, true /* close */); |
| - removed = true; |
| - } |
| - } |
| - |
| - return removed; |
| -} |
| - |
| -void NotificationUIManagerAndroid::CancelAll() { |
| - for (auto iterator : profile_notifications_) { |
| - ProfileNotification* profile_notification = iterator.second; |
| - |
| - PlatformCloseNotification(profile_notification->notification().id()); |
| - delete profile_notification; |
| - } |
| - |
| - profile_notifications_.clear(); |
| -} |
| - |
| -bool NotificationUIManagerAndroid::RegisterNotificationUIManager(JNIEnv* env) { |
| - return RegisterNativesImpl(env); |
| -} |
| - |
| -void NotificationUIManagerAndroid::PlatformCloseNotification( |
| - const std::string& notification_id) { |
| int64_t persistent_notification_id = 0; |
| - if (!base::StringToInt64(notification_id, &persistent_notification_id)) |
| - return; |
| + if (!base::StringToInt64(delegate_id, &persistent_notification_id)) |
|
johnme
2015/04/09 17:00:01
Nit: please add a TODO about changing delegate_ids
Peter Beverloo
2015/04/09 17:34:42
Done.
|
| + return false; |
| const auto iterator = |
| regenerated_notification_infos_.find(persistent_notification_id); |
| if (iterator == regenerated_notification_infos_.end()) |
| - return; |
| + return false; |
| + |
| + const RegeneratedNotificationInfo& notification_info = iterator->second; |
| - RegeneratedNotificationInfo notification_info = iterator->second; |
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jstring> origin = |
| @@ -291,53 +175,32 @@ void NotificationUIManagerAndroid::PlatformCloseNotification( |
| persistent_notification_id, |
| origin.obj(), |
| tag.obj()); |
| + return true; |
| } |
| -void NotificationUIManagerAndroid::AddProfileNotification( |
| - ProfileNotification* profile_notification) { |
| - std::string id = profile_notification->notification().id(); |
| - |
| - // Notification ids should be unique. |
| - DCHECK(profile_notifications_.find(id) == profile_notifications_.end()); |
| - |
| - profile_notifications_[id] = profile_notification; |
| +std::set<std::string> |
| +NotificationUIManagerAndroid::GetAllIdsByProfileAndSourceOrigin( |
| + Profile* profile, |
| + const GURL& source) { |
| + NOTIMPLEMENTED(); |
|
johnme
2015/04/09 17:00:01
This is currently used by PushMessagingServiceImpl
Peter Beverloo
2015/04/09 17:34:42
There's already a row for that on the spreadsheet,
johnme
2015/04/10 11:37:47
There's a difference between unreliable-across-res
|
| + return std::set<std::string>(); |
| } |
| -void NotificationUIManagerAndroid::RemoveProfileNotification( |
| - ProfileNotification* profile_notification, bool close) { |
| - std::string notification_id = profile_notification->notification().id(); |
| - if (close) |
| - PlatformCloseNotification(notification_id); |
| - |
| - profile_notifications_.erase(notification_id); |
| - delete profile_notification; |
| +bool NotificationUIManagerAndroid::CancelAllBySourceOrigin( |
| + const GURL& source_origin) { |
| + NOTIMPLEMENTED(); |
| + return false; |
| } |
| -ProfileNotification* NotificationUIManagerAndroid::FindProfileNotification( |
| - const std::string& id) const { |
| - auto iter = profile_notifications_.find(id); |
| - if (iter == profile_notifications_.end()) |
| - return nullptr; |
| +bool NotificationUIManagerAndroid::CancelAllByProfile(ProfileID profile_id) { |
| + NOTIMPLEMENTED(); |
|
johnme
2015/04/09 17:00:01
Doesn't not implementing this mean that Notificati
Peter Beverloo
2015/04/09 17:34:42
I'm not sure what our incognito story is right now
johnme
2015/04/10 11:37:47
Ok, we chatted offline and you explained that the
|
| + return false; |
| +} |
| - return iter->second; |
| +void NotificationUIManagerAndroid::CancelAll() { |
| + NOTIMPLEMENTED(); |
| } |
| -ProfileNotification* NotificationUIManagerAndroid::FindNotificationToReplace( |
| - const Notification& notification, Profile* profile) const { |
| - const std::string& tag = notification.tag(); |
| - if (tag.empty()) |
| - return nullptr; |
| - |
| - const GURL origin_url = notification.origin_url(); |
| - DCHECK(origin_url.is_valid()); |
| - |
| - for (const auto& iterator : profile_notifications_) { |
| - ProfileNotification* profile_notification = iterator.second; |
| - if (profile_notification->notification().tag() == tag || |
| - profile_notification->notification().origin_url() == origin_url || |
| - profile_notification->profile() == profile) { |
| - return profile_notification; |
| - } |
| - } |
| - return nullptr; |
| +bool NotificationUIManagerAndroid::RegisterNotificationUIManager(JNIEnv* env) { |
| + return RegisterNativesImpl(env); |
| } |