Index: third_party/WebKit/Source/modules/notifications/Notification.cpp |
diff --git a/third_party/WebKit/Source/modules/notifications/Notification.cpp b/third_party/WebKit/Source/modules/notifications/Notification.cpp |
index 42da08ac1f503960eb58cc9b1236cadb5efc0e63..d144c097cc0670fa215ac275ac52615b0c8a417e 100644 |
--- a/third_party/WebKit/Source/modules/notifications/Notification.cpp |
+++ b/third_party/WebKit/Source/modules/notifications/Notification.cpp |
@@ -31,6 +31,7 @@ |
#include "modules/notifications/Notification.h" |
#include "bindings/core/v8/ExceptionState.h" |
+#include "bindings/core/v8/ScriptPromiseResolver.h" |
#include "bindings/core/v8/ScriptState.h" |
#include "bindings/core/v8/SerializedScriptValueFactory.h" |
#include "bindings/modules/v8/V8NotificationAction.h" |
@@ -44,17 +45,16 @@ |
#include "modules/notifications/NotificationData.h" |
#include "modules/notifications/NotificationManager.h" |
#include "modules/notifications/NotificationOptions.h" |
-#include "modules/notifications/NotificationPermissionClient.h" |
+#include "modules/notifications/NotificationPermissionCallback.h" |
#include "modules/notifications/NotificationResourcesLoader.h" |
+#include "modules/permissions/Permissions.h" |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/UserGestureIndicator.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebSecurityOrigin.h" |
-#include "public/platform/WebString.h" |
#include "public/platform/modules/notifications/WebNotificationAction.h" |
#include "public/platform/modules/notifications/WebNotificationConstants.h" |
#include "public/platform/modules/notifications/WebNotificationManager.h" |
-#include "public/platform/modules/permissions/permission_status.mojom-blink.h" |
#include "wtf/Assertions.h" |
#include "wtf/Functional.h" |
@@ -355,13 +355,19 @@ String Notification::permission(ExecutionContext* context) |
ScriptPromise Notification::requestPermission(ScriptState* scriptState, NotificationPermissionCallback* deprecatedCallback) |
{ |
ExecutionContext* context = scriptState->getExecutionContext(); |
- if (NotificationPermissionClient* permissionClient = NotificationPermissionClient::from(context)) |
- return permissionClient->requestPermission(scriptState, deprecatedCallback); |
- // The context has been detached. Return a promise that will never settle. |
- DCHECK(context->activeDOMObjectsAreStopped()); |
+ mojom::blink::PermissionServicePtr permissionService; |
+ Permissions::connectToService(context, mojo::GetProxy(&permissionService)); |
haraken
2016/08/13 01:54:32
I'd prefer connecting to the service in the constr
Reilly Grant (use Gerrit)
2016/08/15 17:55:01
I forgot to remove it. This is a static function s
|
- return ScriptPromise(); |
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ mojom::blink::PermissionService* rawPermissionService = permissionService.get(); |
+ rawPermissionService->RequestPermission( |
+ mojom::blink::PermissionName::NOTIFICATIONS, context->getSecurityOrigin(), UserGestureIndicator::processingUserGesture(), |
+ convertToBaseCallback(WTF::bind(&Notification::onPermissionRequestComplete, passed(std::move(permissionService)), wrapPersistent(resolver), wrapPersistent(deprecatedCallback)))); |
haraken
2016/08/13 01:54:32
Instead of moving the ownership of the service, I'
|
+ |
+ return promise; |
} |
size_t Notification::maxActions() |
@@ -397,6 +403,15 @@ bool Notification::hasPendingActivity() const |
return m_state == NotificationStateShowing || m_prepareShowMethodRunner->isActive() || m_loader; |
} |
+void Notification::onPermissionRequestComplete(mojom::blink::PermissionServicePtr permissionService, ScriptPromiseResolver* resolver, NotificationPermissionCallback* deprecatedCallback, mojom::blink::PermissionStatus status) |
+{ |
+ String statusString = permissionString(status); |
+ if (deprecatedCallback) |
+ deprecatedCallback->handleEvent(statusString); |
+ |
+ resolver->resolve(statusString); |
+} |
+ |
DEFINE_TRACE(Notification) |
{ |
visitor->trace(m_prepareShowMethodRunner); |