Index: third_party/WebKit/Source/web/NotificationPermissionClientImpl.cpp |
diff --git a/third_party/WebKit/Source/web/NotificationPermissionClientImpl.cpp b/third_party/WebKit/Source/web/NotificationPermissionClientImpl.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9210d480cd7f5ce5b4e4bb19a9310b1083c58a16 |
--- /dev/null |
+++ b/third_party/WebKit/Source/web/NotificationPermissionClientImpl.cpp |
@@ -0,0 +1,79 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "web/NotificationPermissionClientImpl.h" |
+ |
+#include "bindings/core/v8/ScriptPromiseResolver.h" |
+#include "bindings/core/v8/ScriptState.h" |
+#include "core/dom/Document.h" |
+#include "core/dom/ExecutionContext.h" |
+#include "modules/notifications/Notification.h" |
+#include "modules/notifications/NotificationPermissionCallback.h" |
+#include "public/web/WebFrameClient.h" |
+#include "public/web/modules/notifications/WebNotificationPermissionCallback.h" |
+#include "web/WebLocalFrameImpl.h" |
+ |
+namespace blink { |
+ |
+namespace { |
+ |
+class WebNotificationPermissionCallbackImpl : public WebNotificationPermissionCallback { |
+public: |
+ WebNotificationPermissionCallbackImpl(ScriptPromiseResolver* resolver, NotificationPermissionCallback* deprecatedCallback) |
+ : m_resolver(resolver) |
+ , m_deprecatedCallback(deprecatedCallback) |
+ { |
+ } |
+ |
+ ~WebNotificationPermissionCallbackImpl() override { } |
+ |
+ void permissionRequestComplete(int32_t permissionStatus) override |
+ { |
+ String permissionString = Notification::permissionString(static_cast<mojom::blink::PermissionStatus>(permissionStatus)); |
+ if (m_deprecatedCallback) |
+ m_deprecatedCallback->handleEvent(permissionString); |
+ |
+ m_resolver->resolve(permissionString); |
+ } |
+ |
+private: |
+ Persistent<ScriptPromiseResolver> m_resolver; |
+ Persistent<NotificationPermissionCallback> m_deprecatedCallback; |
+}; |
+ |
+} // namespace |
+ |
+NotificationPermissionClientImpl* NotificationPermissionClientImpl::create() |
+{ |
+ return new NotificationPermissionClientImpl(); |
+} |
+ |
+NotificationPermissionClientImpl::NotificationPermissionClientImpl() |
+{ |
+} |
+ |
+NotificationPermissionClientImpl::~NotificationPermissionClientImpl() |
+{ |
+} |
+ |
+ScriptPromise NotificationPermissionClientImpl::requestPermission(ScriptState* scriptState, NotificationPermissionCallback* deprecatedCallback) |
+{ |
+ DCHECK(scriptState); |
+ |
+ ExecutionContext* context = scriptState->getExecutionContext(); |
+ DCHECK(context); |
+ DCHECK(context->isDocument()); |
+ |
+ Document* document = toDocument(context); |
+ WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(document->frame()); |
+ |
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ webFrame->client()->requestNotificationPermission(WebSecurityOrigin(context->getSecurityOrigin()), new WebNotificationPermissionCallbackImpl(resolver, deprecatedCallback)); |
+ |
+ return promise; |
+} |
+ |
+} // namespace blink |