Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2241)

Unified Diff: Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp

Issue 787893002: Actually hook up ServiceWorkerRegistration.showNotification() (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/bindings/core/v8/CallbackPromiseAdapter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
diff --git a/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp b/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
index ce61ae67fc88484b98092d2f13fd1d3ecfdeda2f..f4a3d5a36cc7e18c7580d475786e32363e4c7728 100644
--- a/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
+++ b/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
@@ -5,28 +5,58 @@
#include "config.h"
#include "modules/notifications/ServiceWorkerRegistrationNotifications.h"
+#include "bindings/core/v8/CallbackPromiseAdapter.h"
+#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "bindings/core/v8/V8ThrowException.h"
#include "core/dom/DOMException.h"
#include "core/dom/ExceptionCode.h"
#include "core/dom/ExecutionContext.h"
+#include "modules/notifications/Notification.h"
#include "modules/notifications/NotificationOptions.h"
#include "platform/weborigin/KURL.h"
+#include "public/platform/Platform.h"
#include "public/platform/WebNotificationData.h"
+#include "public/platform/WebNotificationManager.h"
+#include "public/platform/WebSerializedOrigin.h"
namespace blink {
ScriptPromise ServiceWorkerRegistrationNotifications::showNotification(ScriptState* scriptState, ServiceWorkerRegistration& serviceWorkerRegistration, const String& title, const NotificationOptions& options)
{
+ ExecutionContext* executionContext = scriptState->executionContext();
+
+ // If context object's active worker is null, reject promise with a TypeError exception.
+ if (!serviceWorkerRegistration.active())
+ return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError(scriptState->isolate(), "No active registration available on the ServiceWorkerRegistration."));
+
+ // If permission for notification's origin is not "granted", reject promise with a TypeError exception, and terminate these substeps.
+ if (Notification::checkPermission(executionContext) != WebNotificationPermissionAllowed)
+ return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError(scriptState->isolate(), "No notification permission has been granted for this origin."));
+
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
+ ScriptPromise promise = resolver->promise();
+
+ // FIXME: Do the appropriate CORS checks on the icon URL.
+ // FIXME: Determine the text direction based on the options dictionary.
+
KURL iconUrl;
if (options.hasIcon() && !options.icon().isEmpty()) {
- iconUrl = scriptState->executionContext()->completeURL(options.icon());
+ iconUrl = executionContext->completeURL(options.icon());
if (!iconUrl.isValid())
iconUrl = KURL();
}
WebNotificationData notification(title, WebNotificationData::DirectionLeftToRight, options.lang(), options.body(), options.tag(), iconUrl);
+ WebNotificationShowCallbacks* callbacks = new CallbackPromiseAdapter<void, void>(resolver);
+
+ SecurityOrigin* origin = executionContext->securityOrigin();
+ ASSERT(origin);
+
+ WebNotificationManager* notificationManager = Platform::current()->notificationManager();
+ ASSERT(notificationManager);
- // FIXME: Hook this up with the Blink API once it's been implemented.
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "showNotification is not implemented yet."));
+ notificationManager->showPersistent(WebSerializedOrigin(*origin), notification, serviceWorkerRegistration.webRegistration(), callbacks);
+ return promise;
}
} // namespace blink
« no previous file with comments | « Source/bindings/core/v8/CallbackPromiseAdapter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698