Chromium Code Reviews| 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)); |
| - return ScriptPromise(); |
| + ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
| + ScriptPromise promise = resolver->promise(); |
| + |
| + mojom::blink::PermissionService* rawPermissionService = permissionService.get(); |
| + rawPermissionService->RequestPermission( |
|
esprehn
2016/08/12 23:24:32
I thought the Ptr wrapper could be called through
Reilly Grant (use Gerrit)
2016/08/12 23:28:59
The arguments will be evaluated before the object
|
| + mojom::blink::PermissionName::NOTIFICATIONS, context->getSecurityOrigin(), UserGestureIndicator::processingUserGesture(), |
| + convertToBaseCallback(WTF::bind(&Notification::onPermissionRequestComplete, passed(std::move(permissionService)), wrapPersistent(resolver), wrapPersistent(deprecatedCallback)))); |
| + |
| + 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); |