Chromium Code Reviews| Index: third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| diff --git a/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp b/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6c55efea7f305b9b8134bd2212750dd34517b1fb |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/modules/notifications/NotificationManager.cpp |
| @@ -0,0 +1,84 @@ |
| +// Copyright 2016 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 "modules/notifications/NotificationManager.h" |
| + |
| +#include "platform/weborigin/SecurityOrigin.h" |
| +#include "public/platform/Platform.h" |
| +#include "public/platform/ServiceRegistry.h" |
| +#include "public/platform/modules/permissions/permission_status.mojom-blink.h" |
| +#include "public/platform/modules/permissions/permission_status.mojom.h" |
|
dcheng
2016/05/10 06:54:46
Whoa. How come we need both? We plan on making it
Peter Beverloo
2016/05/10 13:32:55
This is a transitional step only, because the Perm
|
| + |
| +namespace blink { |
| + |
| +#define STATIC_ASSERT_ENUM(a, b) \ |
| + static_assert(static_cast<int>(a) == static_cast<int>(b), "mismatching enum: " #a) |
| + |
| +STATIC_ASSERT_ENUM(mojom::PermissionStatus::GRANTED, mojom::blink::PermissionStatus::GRANTED); |
| +STATIC_ASSERT_ENUM(mojom::PermissionStatus::DENIED, mojom::blink::PermissionStatus::DENIED); |
| +STATIC_ASSERT_ENUM(mojom::PermissionStatus::ASK, mojom::blink::PermissionStatus::ASK); |
| +STATIC_ASSERT_ENUM(mojom::PermissionStatus::LAST, mojom::blink::PermissionStatus::LAST); |
| + |
| +// static |
| +NotificationManager* NotificationManager::from(ExecutionContext* executionContext) |
| +{ |
| + DCHECK(executionContext); |
| + DCHECK(executionContext->isContextThread()); |
| + |
| + NotificationManager* manager = static_cast<NotificationManager*>(Supplement<ExecutionContext>::from(executionContext, supplementName())); |
| + if (!manager) { |
| + manager = new NotificationManager(executionContext); |
| + Supplement<ExecutionContext>::provideTo(*executionContext, supplementName(), manager); |
| + } |
| + |
| + return manager; |
| +} |
| + |
| +// static |
| +const char* NotificationManager::supplementName() |
| +{ |
| + return "NotificationManager"; |
| +} |
| + |
| +NotificationManager::NotificationManager(ExecutionContext* executionContext) |
| + : ContextLifecycleObserver(executionContext) |
| +{ |
| + Platform::current()->serviceRegistry()->connectToRemoteService(mojo::GetProxy(&m_service)); |
| +} |
| + |
| +NotificationManager::~NotificationManager() |
| +{ |
| +} |
| + |
| +mojom::PermissionStatus NotificationManager::permissionStatus() const |
| +{ |
| + mojom::blink::PermissionStatus blinkPermissionStatus; |
| + |
| + const bool result = |
| + m_service->GetPermissionStatus(getOriginString(), &blinkPermissionStatus); |
| + DCHECK(result); |
| + |
| + // Both PermissionStatus enums are generated from the same source, but by using the WTF variant |
| + // of the NotificationService the same variant of the enum must be used, different from other |
| + // users. Static assertions for equality are included in this file. |
| + return static_cast<mojom::PermissionStatus>(blinkPermissionStatus); |
| +} |
| + |
| +void NotificationManager::contextDestroyed() |
| +{ |
| + m_service.reset(); |
| +} |
| + |
| +String NotificationManager::getOriginString() const |
| +{ |
| + return getExecutionContext()->getSecurityOrigin()->toString(); |
| +} |
| + |
| +DEFINE_TRACE(NotificationManager) |
| +{ |
| + ContextLifecycleObserver::trace(visitor); |
| + Supplement<ExecutionContext>::trace(visitor); |
| +} |
| + |
| +} // namespace blink |