| Index: content/shell/browser/layout_test/layout_test_notification_manager.cc
|
| diff --git a/content/shell/browser/layout_test/layout_test_notification_manager.cc b/content/shell/browser/layout_test/layout_test_notification_manager.cc
|
| index 99a6a23f7b63180d9a415dbfc2e277765a3b8df8..b3f64b471bd1760a91999686d5a6022d4b902a0a 100644
|
| --- a/content/shell/browser/layout_test/layout_test_notification_manager.cc
|
| +++ b/content/shell/browser/layout_test/layout_test_notification_manager.cc
|
| @@ -4,14 +4,21 @@
|
|
|
| #include "content/shell/browser/layout_test/layout_test_notification_manager.h"
|
|
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "content/public/browser/desktop_notification_delegate.h"
|
| +#include "content/public/common/show_desktop_notification_params.h"
|
| +
|
| namespace content {
|
|
|
| -LayoutTestNotificationManager::LayoutTestNotificationManager() {}
|
| +LayoutTestNotificationManager::LayoutTestNotificationManager()
|
| + : weak_factory_(this) {}
|
|
|
| LayoutTestNotificationManager::~LayoutTestNotificationManager() {}
|
|
|
| blink::WebNotificationPermission
|
| LayoutTestNotificationManager::CheckPermission(const GURL& origin) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| NotificationPermissionMap::iterator iter =
|
| permission_map_.find(origin);
|
| if (iter == permission_map_.end())
|
| @@ -23,17 +30,73 @@ LayoutTestNotificationManager::CheckPermission(const GURL& origin) {
|
| void LayoutTestNotificationManager::RequestPermission(
|
| const GURL& origin,
|
| const base::Callback<void(blink::WebNotificationPermission)>& callback) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| callback.Run(CheckPermission(origin));
|
| }
|
|
|
| void LayoutTestNotificationManager::SetPermission(
|
| const GURL& origin,
|
| blink::WebNotificationPermission permission) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| permission_map_[origin] = permission;
|
| }
|
|
|
| void LayoutTestNotificationManager::ClearPermissions() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| permission_map_.clear();
|
| }
|
|
|
| +void LayoutTestNotificationManager::Show(
|
| + const ShowDesktopNotificationHostMsgParams& params,
|
| + scoped_ptr<DesktopNotificationDelegate> delegate,
|
| + base::Closure* cancel_callback) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + std::string title = base::UTF16ToUTF8(params.title);
|
| +
|
| + DCHECK(cancel_callback);
|
| + *cancel_callback = base::Bind(&LayoutTestNotificationManager::Close,
|
| + weak_factory_.GetWeakPtr(),
|
| + title);
|
| +
|
| + if (params.replace_id.length()) {
|
| + std::string replace_id = base::UTF16ToUTF8(params.replace_id);
|
| + auto replace_iter = replacements_.find(replace_id);
|
| + if (replace_iter != replacements_.end()) {
|
| + const std::string& previous_title = replace_iter->second;
|
| + auto notification_iter = notifications_.find(previous_title);
|
| + if (notification_iter != notifications_.end()) {
|
| + DesktopNotificationDelegate* previous_delegate =
|
| + notification_iter->second;
|
| + previous_delegate->NotificationClosed(false);
|
| +
|
| + notifications_.erase(notification_iter);
|
| + delete previous_delegate;
|
| + }
|
| + }
|
| +
|
| + replacements_[replace_id] = title;
|
| + }
|
| +
|
| + notifications_[title] = delegate.release();
|
| + notifications_[title]->NotificationDisplayed();
|
| +}
|
| +
|
| +void LayoutTestNotificationManager::SimulateClick(const std::string& title) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + auto iterator = notifications_.find(title);
|
| + if (iterator == notifications_.end())
|
| + return;
|
| +
|
| + iterator->second->NotificationClick();
|
| +}
|
| +
|
| +void LayoutTestNotificationManager::Close(const std::string& title) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + auto iterator = notifications_.find(title);
|
| + if (iterator == notifications_.end())
|
| + return;
|
| +
|
| + iterator->second->NotificationClosed(false);
|
| +}
|
| +
|
| } // namespace content
|
|
|