| Index: Source/modules/push_messaging/PushManager.cpp
|
| diff --git a/Source/modules/push_messaging/PushManager.cpp b/Source/modules/push_messaging/PushManager.cpp
|
| index 1d6237303cfc982851815527c09c34023d47791c..c375a159930af831a98f4157b6f950351b9e5d6a 100644
|
| --- a/Source/modules/push_messaging/PushManager.cpp
|
| +++ b/Source/modules/push_messaging/PushManager.cpp
|
| @@ -16,6 +16,8 @@
|
| #include "core/frame/LocalDOMWindow.h"
|
| #include "modules/push_messaging/PushController.h"
|
| #include "modules/push_messaging/PushError.h"
|
| +#include "modules/push_messaging/PushPermissionClient.h"
|
| +#include "modules/push_messaging/PushPermissionRequestCallback.h"
|
| #include "modules/push_messaging/PushPermissionStatusCallback.h"
|
| #include "modules/push_messaging/PushRegistration.h"
|
| #include "modules/serviceworkers/NavigatorServiceWorker.h"
|
| @@ -43,12 +45,21 @@ ScriptPromise PushManager::registerPushMessaging(ScriptState* scriptState)
|
| if (!serviceWorkerProvider)
|
| return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "No Service Worker installed for this document."));
|
|
|
| + // FIXME: Once everything except permission request goes through platform,
|
| + // delete WebPushClient and usage such as this one.
|
| + // See crbug.com/389194
|
| WebPushClient* client = PushController::clientFrom(document->page());
|
| ASSERT(client);
|
|
|
| RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
|
| ScriptPromise promise = resolver->promise();
|
| - client->registerPushMessaging(new CallbackPromiseAdapter<PushRegistration, PushError>(resolver), serviceWorkerProvider);
|
| +
|
| + PushPermissionClient* permissionClient = PushPermissionClient::from(scriptState->executionContext());
|
| + if (permissionClient)
|
| + permissionClient->requestPermission(scriptState->executionContext(), new PushPermissionRequestCallback(this, client, resolver, serviceWorkerProvider));
|
| + else
|
| + doRegister(client, resolver, serviceWorkerProvider);
|
| +
|
| return promise;
|
| }
|
|
|
| @@ -76,4 +87,9 @@ ScriptPromise PushManager::hasPermission(ScriptState* scriptState)
|
| return resolver->promise();
|
| }
|
|
|
| +void PushManager::doRegister(WebPushClient* client, PassRefPtr<ScriptPromiseResolver> resolver, WebServiceWorkerProvider* serviceWorkerProvider)
|
| +{
|
| + client->registerPushMessaging(new CallbackPromiseAdapter<PushRegistration, PushError>(resolver), serviceWorkerProvider);
|
| +}
|
| +
|
| } // namespace blink
|
|
|