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 |