Chromium Code Reviews| Index: third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| diff --git a/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp b/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| index ea8a6f7de4d7595c2eb417e7e9b6d32d8583342b..265a2d23e868fc7466f01c43e25f4a034b62f8e1 100644 |
| --- a/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| +++ b/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| @@ -4,10 +4,18 @@ |
| #include "modules/notifications/NotificationManager.h" |
| +#include "bindings/core/v8/ScriptPromiseResolver.h" |
| +#include "bindings/core/v8/ScriptState.h" |
| +#include "modules/notifications/Notification.h" |
| +#include "modules/notifications/NotificationPermissionCallback.h" |
| +#include "modules/permissions/Permissions.h" |
| +#include "platform/UserGestureIndicator.h" |
| #include "platform/weborigin/SecurityOrigin.h" |
| #include "public/platform/InterfaceProvider.h" |
| #include "public/platform/Platform.h" |
| +#include "public/platform/modules/permissions/permission.mojom-blink.h" |
| #include "public/platform/modules/permissions/permission_status.mojom-blink.h" |
| +#include "wtf/Functional.h" |
| namespace blink { |
| @@ -35,27 +43,54 @@ const char* NotificationManager::supplementName() |
| NotificationManager::NotificationManager(ExecutionContext* executionContext) |
| : ContextLifecycleObserver(executionContext) |
| { |
| - Platform::current()->interfaceProvider()->getInterface(mojo::GetProxy(&m_service)); |
| } |
| NotificationManager::~NotificationManager() |
| { |
| } |
| -mojom::blink::PermissionStatus NotificationManager::permissionStatus() const |
| +mojom::blink::PermissionStatus NotificationManager::permissionStatus() |
| { |
| - mojom::blink::PermissionStatus permissionStatus; |
| + if (!m_notificationService) |
|
esprehn
2016/08/15 20:07:48
why does permissionStatus() do:
Platform:
|
| + Platform::current()->interfaceProvider()->getInterface(mojo::GetProxy(&m_notificationService)); |
| - const bool result = |
| - m_service->GetPermissionStatus(getExecutionContext()->getSecurityOrigin()->toString(), &permissionStatus); |
| + mojom::blink::PermissionStatus permissionStatus; |
| + const bool result = m_notificationService->GetPermissionStatus(getExecutionContext()->getSecurityOrigin()->toString(), &permissionStatus); |
| DCHECK(result); |
| return permissionStatus; |
| } |
| +ScriptPromise NotificationManager::requestPermission(ScriptState* scriptState, NotificationPermissionCallback* deprecatedCallback) |
| +{ |
| + ExecutionContext* context = scriptState->getExecutionContext(); |
| + |
| + if (!m_permissionService) |
| + Permissions::connectToService(context, mojo::GetProxy(&m_permissionService)); |
| + |
| + ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
| + ScriptPromise promise = resolver->promise(); |
| + |
| + m_permissionService->RequestPermission( |
| + mojom::blink::PermissionName::NOTIFICATIONS, context->getSecurityOrigin(), UserGestureIndicator::processingUserGesture(), |
| + convertToBaseCallback(WTF::bind(&NotificationManager::onPermissionRequestComplete, wrapPersistent(this), wrapPersistent(resolver), wrapPersistent(deprecatedCallback)))); |
| + |
| + return promise; |
| +} |
| + |
| void NotificationManager::contextDestroyed() |
| { |
| - m_service.reset(); |
| + m_notificationService.reset(); |
| + m_permissionService.reset(); |
| +} |
| + |
| +void NotificationManager::onPermissionRequestComplete(ScriptPromiseResolver* resolver, NotificationPermissionCallback* deprecatedCallback, mojom::blink::PermissionStatus status) |
| +{ |
| + String statusString = Notification::permissionString(status); |
| + if (deprecatedCallback) |
| + deprecatedCallback->handleEvent(statusString); |
| + |
| + resolver->resolve(statusString); |
| } |
| DEFINE_TRACE(NotificationManager) |