Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2356)

Unified Diff: Source/modules/push_messaging/PushManager.cpp

Issue 783983003: Push API: move PushManager from Navigator to ServiceWorkerRegistration [switchover 6/6] (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/push_messaging/PushManager.cpp
diff --git a/Source/modules/push_messaging/PushManager.cpp b/Source/modules/push_messaging/PushManager.cpp
index d84587e8e98484cc502c3c242aafdf41957e7328..42a6c32ae9853319759f550a6ad536015d8c033e 100644
--- a/Source/modules/push_messaging/PushManager.cpp
+++ b/Source/modules/push_messaging/PushManager.cpp
@@ -20,63 +20,57 @@
#include "modules/push_messaging/PushRegistration.h"
#include "modules/serviceworkers/NavigatorServiceWorker.h"
Peter Beverloo 2014/12/08 21:40:51 nit: This include seems to be unused.
Michael van Ouwerkerk 2014/12/09 18:47:45 Could have sworn I removed that. Maybe I mishandle
#include "modules/serviceworkers/ServiceWorkerContainer.h"
Peter Beverloo 2014/12/08 21:40:51 nit: This include seems to be unused.
Michael van Ouwerkerk 2014/12/09 18:47:45 Done.
+#include "modules/serviceworkers/ServiceWorkerRegistration.h"
+#include "public/platform/Platform.h"
#include "public/platform/WebPushClient.h"
+#include "public/platform/WebPushProvider.h"
#include "wtf/RefPtr.h"
namespace blink {
-PushManager::PushManager()
+PushManager::PushManager(ServiceWorkerRegistration* registration)
+ : m_registration(registration)
{
Peter Beverloo 2014/12/08 21:40:51 ASSERT(registration)
Michael van Ouwerkerk 2014/12/09 18:47:45 Done.
}
-// FIXME: This call should be available from workers which will not have a Document object available.
-// See crbug.com/389194
ScriptPromise PushManager::registerPushMessaging(ScriptState* scriptState)
{
- ASSERT(scriptState->executionContext()->isDocument());
-
- Document* document = toDocument(scriptState->executionContext());
- if (!document->domWindow() || !document->frame())
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "Document is detached from window."));
-
- WebServiceWorkerProvider* serviceWorkerProvider = NavigatorServiceWorker::serviceWorker(*document->domWindow()->navigator())->provider();
- if (!serviceWorkerProvider)
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "No Service Worker installed for this document."));
-
- WebPushClient* client = PushController::clientFrom(document->frame());
- ASSERT(client);
+ if (scriptState->executionContext()->isDocument()) {
+ Document* document = toDocument(scriptState->executionContext());
+ if (!document->domWindow() || !document->frame())
+ return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "Document is detached from window."));
+
+ WebPushClient* client = PushController::clientFrom(document->frame());
+ ASSERT(client);
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
+ ScriptPromise promise = resolver->promise();
Peter Beverloo 2014/12/08 21:40:51 There's quite a bit of shared code here. Can we pe
Michael van Ouwerkerk 2014/12/09 18:47:45 Done.
+ client->registerPushMessaging(m_registration->webRegistration(), new CallbackPromiseAdapter<PushRegistration, PushError>(resolver));
+ return promise;
+ }
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
-
- client->registerPushMessaging(new CallbackPromiseAdapter<PushRegistration, PushError>(resolver), serviceWorkerProvider);
-
+ Platform::current()->pushProvider()->registerPushMessaging(m_registration->webRegistration(), new CallbackPromiseAdapter<PushRegistration, PushError>(resolver));
Peter Beverloo 2014/12/08 21:40:51 Can you add a utility method to receive the pushPr
Michael van Ouwerkerk 2014/12/09 18:47:45 Done.
return promise;
}
-// FIXME: This call should be available from workers which will not have a Document object available.
-// See crbug.com/389194
ScriptPromise PushManager::hasPermission(ScriptState* scriptState)
{
- ASSERT(scriptState->executionContext()->isDocument());
-
- Document* document = toDocument(scriptState->executionContext());
- if (!document->domWindow() || !document->frame())
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "Document is detached from window."));
- blink::WebPushClient* client = PushController::clientFrom(document->frame());
- ASSERT(client);
-
- // The currently implemented specification does not require a Service Worker to be present for the
- // hasPermission() call to work, but it will become a requirement soon.
- WebServiceWorkerProvider* serviceWorkerProvider = NavigatorServiceWorker::serviceWorker(*document->domWindow()->navigator())->provider();
- if (!serviceWorkerProvider)
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "No Service Worker installed for this document."));
+ if (scriptState->executionContext()->isDocument()) {
+ Document* document = toDocument(scriptState->executionContext());
+ if (!document->domWindow() || !document->frame())
+ return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "Document is detached from window."));
Peter Beverloo 2014/12/08 21:40:51 I'm a bit reluctant to continue having these check
Michael van Ouwerkerk 2014/12/09 18:47:45 As discussed offline, I ran into some trouble port
+ }
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
-
ScriptPromise promise = resolver->promise();
- client->getPermissionStatus(new PushPermissionStatusCallback(resolver), serviceWorkerProvider);
+ Platform::current()->pushProvider()->getPermissionStatus(m_registration->webRegistration(), new PushPermissionStatusCallback(resolver));
return promise;
}
+void PushManager::trace(Visitor* visitor)
+{
+ visitor->trace(m_registration);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698