| Index: third_party/WebKit/Source/modules/notifications/Notification.cpp
|
| diff --git a/third_party/WebKit/Source/modules/notifications/Notification.cpp b/third_party/WebKit/Source/modules/notifications/Notification.cpp
|
| index 571912ded3ddb32035f64812da5fa4061b0fe21e..2179de0ac991c82fb271161206d2c4d1a8aadec6 100644
|
| --- a/third_party/WebKit/Source/modules/notifications/Notification.cpp
|
| +++ b/third_party/WebKit/Source/modules/notifications/Notification.cpp
|
| @@ -43,6 +43,7 @@
|
| #include "modules/notifications/NotificationData.h"
|
| #include "modules/notifications/NotificationOptions.h"
|
| #include "modules/notifications/NotificationPermissionClient.h"
|
| +#include "modules/notifications/NotificationResourcesLoader.h"
|
| #include "platform/RuntimeEnabledFeatures.h"
|
| #include "platform/UserGestureIndicator.h"
|
| #include "public/platform/Platform.h"
|
| @@ -50,6 +51,7 @@
|
| #include "public/platform/WebString.h"
|
| #include "public/platform/modules/notifications/WebNotificationAction.h"
|
| #include "public/platform/modules/notifications/WebNotificationManager.h"
|
| +#include "wtf/Functional.h"
|
|
|
| namespace blink {
|
| namespace {
|
| @@ -99,7 +101,7 @@ Notification* Notification::create(ExecutionContext* context, const String& titl
|
| return nullptr;
|
|
|
| Notification* notification = new Notification(context, data);
|
| - notification->scheduleShow();
|
| + notification->schedulePrepareShow();
|
| notification->suspendIfNeeded();
|
|
|
| return notification;
|
| @@ -121,7 +123,7 @@ Notification::Notification(ExecutionContext* context, const WebNotificationData&
|
| , m_data(data)
|
| , m_persistentId(kInvalidPersistentId)
|
| , m_state(NotificationStateIdle)
|
| - , m_asyncRunner(AsyncMethodRunner<Notification>::create(this, &Notification::show))
|
| + , m_prepareShowMethodRunner(AsyncMethodRunner<Notification>::create(this, &Notification::prepareShow))
|
| {
|
| ASSERT(notificationManager());
|
| }
|
| @@ -130,15 +132,15 @@ Notification::~Notification()
|
| {
|
| }
|
|
|
| -void Notification::scheduleShow()
|
| +void Notification::schedulePrepareShow()
|
| {
|
| ASSERT(m_state == NotificationStateIdle);
|
| - ASSERT(!m_asyncRunner->isActive());
|
| + ASSERT(!m_prepareShowMethodRunner->isActive());
|
|
|
| - m_asyncRunner->runAsync();
|
| + m_prepareShowMethodRunner->runAsync();
|
| }
|
|
|
| -void Notification::show()
|
| +void Notification::prepareShow()
|
| {
|
| ASSERT(m_state == NotificationStateIdle);
|
| if (Notification::checkPermission(getExecutionContext()) != WebNotificationPermissionAllowed) {
|
| @@ -146,10 +148,19 @@ void Notification::show()
|
| return;
|
| }
|
|
|
| + m_loader = new NotificationResourcesLoader(bind<NotificationResourcesLoader*>(&Notification::didLoadResources, WeakPersistentThisPointer<Notification>(this)));
|
| + m_loader->start(getExecutionContext(), m_data);
|
| +}
|
| +
|
| +void Notification::didLoadResources(NotificationResourcesLoader* loader)
|
| +{
|
| + DCHECK_EQ(loader, m_loader.get());
|
| +
|
| SecurityOrigin* origin = getExecutionContext()->getSecurityOrigin();
|
| ASSERT(origin);
|
|
|
| - notificationManager()->show(WebSecurityOrigin(origin), m_data, this);
|
| + notificationManager()->show(WebSecurityOrigin(origin), m_data, loader->getResources(), this);
|
| + m_loader.clear();
|
|
|
| m_state = NotificationStateShowing;
|
| }
|
| @@ -386,17 +397,21 @@ void Notification::stop()
|
|
|
| m_state = NotificationStateClosed;
|
|
|
| - m_asyncRunner->stop();
|
| + m_prepareShowMethodRunner->stop();
|
| +
|
| + if (m_loader)
|
| + m_loader->stop();
|
| }
|
|
|
| bool Notification::hasPendingActivity() const
|
| {
|
| - return m_state == NotificationStateShowing || m_asyncRunner->isActive();
|
| + return m_state == NotificationStateShowing || m_prepareShowMethodRunner->isActive() || m_loader;
|
| }
|
|
|
| DEFINE_TRACE(Notification)
|
| {
|
| - visitor->trace(m_asyncRunner);
|
| + visitor->trace(m_prepareShowMethodRunner);
|
| + visitor->trace(m_loader);
|
| EventTargetWithInlineData::trace(visitor);
|
| ActiveDOMObject::trace(visitor);
|
| }
|
|
|