Chromium Code Reviews| 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) |
|
Mike West
2014/11/06 14:21:20
Do you expect there to be execution contexts witho
Michael van Ouwerkerk
2014/11/06 14:59:46
Yes, it will not be available in service workers.
|
| + 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 |