Commit 6c3bfdde authored by shimazu@chromium.org's avatar shimazu@chromium.org

ServiceWorker: Issue a warning after initial execution of worker script

This patch enables the inspector to issue a warning when developers add a event handler after an initial evaluation of the ServiceWorker script.

BUG=401870
TEST=manually

Review URL: https://codereview.chromium.org/657213004

git-svn-id: svn://svn.chromium.org/blink/trunk@184227 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 0e0dbbf1
...@@ -215,6 +215,10 @@ void WorkerGlobalScope::dispose() ...@@ -215,6 +215,10 @@ void WorkerGlobalScope::dispose()
// scope are gone. // scope are gone.
} }
void WorkerGlobalScope::didEvaluateWorkerScript()
{
}
void WorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionState& exceptionState) void WorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionState& exceptionState)
{ {
ASSERT(contentSecurityPolicy()); ASSERT(contentSecurityPolicy());
......
...@@ -83,6 +83,7 @@ public: ...@@ -83,6 +83,7 @@ public:
void clearScript() { m_script.clear(); } void clearScript() { m_script.clear(); }
void clearInspector(); void clearInspector();
virtual void didEvaluateWorkerScript();
void dispose(); void dispose();
WorkerThread* thread() const { return m_thread; } WorkerThread* thread() const { return m_thread; }
......
...@@ -321,6 +321,7 @@ void WorkerThread::initialize() ...@@ -321,6 +321,7 @@ void WorkerThread::initialize()
script->initializeContextIfNeeded(); script->initializeContextIfNeeded();
InspectorInstrumentation::willEvaluateWorkerScript(workerGlobalScope(), startMode); InspectorInstrumentation::willEvaluateWorkerScript(workerGlobalScope(), startMode);
script->evaluate(ScriptSourceCode(sourceCode, scriptURL)); script->evaluate(ScriptSourceCode(sourceCode, scriptURL));
m_workerGlobalScope->didEvaluateWorkerScript();
postInitialize(); postInitialize();
......
...@@ -65,6 +65,7 @@ PassRefPtrWillBeRawPtr<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::creat ...@@ -65,6 +65,7 @@ PassRefPtrWillBeRawPtr<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::creat
ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(const KURL& url, const String& userAgent, ServiceWorkerThread* thread, double timeOrigin, const SecurityOrigin* starterOrigin, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients) ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(const KURL& url, const String& userAgent, ServiceWorkerThread* thread, double timeOrigin, const SecurityOrigin* starterOrigin, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients)
: WorkerGlobalScope(url, userAgent, thread, timeOrigin, starterOrigin, workerClients) : WorkerGlobalScope(url, userAgent, thread, timeOrigin, starterOrigin, workerClients)
, m_fetchManager(adoptPtr(new FetchManager(this))) , m_fetchManager(adoptPtr(new FetchManager(this)))
, m_didEvaluateScript(false)
{ {
} }
...@@ -72,6 +73,11 @@ ServiceWorkerGlobalScope::~ServiceWorkerGlobalScope() ...@@ -72,6 +73,11 @@ ServiceWorkerGlobalScope::~ServiceWorkerGlobalScope()
{ {
} }
void ServiceWorkerGlobalScope::didEvaluateWorkerScript()
{
m_didEvaluateScript = true;
}
void ServiceWorkerGlobalScope::stopFetch() void ServiceWorkerGlobalScope::stopFetch()
{ {
m_fetchManager.clear(); m_fetchManager.clear();
...@@ -165,6 +171,20 @@ void ServiceWorkerGlobalScope::close(ExceptionState& exceptionState) ...@@ -165,6 +171,20 @@ void ServiceWorkerGlobalScope::close(ExceptionState& exceptionState)
exceptionState.throwDOMException(InvalidAccessError, "Not supported."); exceptionState.throwDOMException(InvalidAccessError, "Not supported.");
} }
bool ServiceWorkerGlobalScope::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
{
if (m_didEvaluateScript) {
if (eventType == EventTypeNames::install) {
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(JSMessageSource, WarningMessageLevel, "Event handler of 'install' event must be added on the initial evaluation of worker script.");
addMessageToWorkerConsole(consoleMessage.release());
} else if (eventType == EventTypeNames::activate) {
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(JSMessageSource, WarningMessageLevel, "Event handler of 'activate' event must be added on the initial evaluation of worker script.");
addMessageToWorkerConsole(consoleMessage.release());
}
}
return WorkerGlobalScope::addEventListener(eventType, listener, useCapture);
}
const AtomicString& ServiceWorkerGlobalScope::interfaceName() const const AtomicString& ServiceWorkerGlobalScope::interfaceName() const
{ {
return EventTargetNames::ServiceWorkerGlobalScope; return EventTargetNames::ServiceWorkerGlobalScope;
......
...@@ -55,7 +55,10 @@ public: ...@@ -55,7 +55,10 @@ public:
virtual ~ServiceWorkerGlobalScope(); virtual ~ServiceWorkerGlobalScope();
virtual bool isServiceWorkerGlobalScope() const override { return true; } virtual bool isServiceWorkerGlobalScope() const override { return true; }
// WorkerGlobalScope
virtual void stopFetch() override; virtual void stopFetch() override;
virtual void didEvaluateWorkerScript() override;
// ServiceWorkerGlobalScope.idl // ServiceWorkerGlobalScope.idl
ServiceWorkerClients* clients(); ServiceWorkerClients* clients();
...@@ -71,6 +74,7 @@ public: ...@@ -71,6 +74,7 @@ public:
void close(ExceptionState&); void close(ExceptionState&);
// EventTarget // EventTarget
virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture = false) override;
virtual const AtomicString& interfaceName() const override; virtual const AtomicString& interfaceName() const override;
DEFINE_ATTRIBUTE_EVENT_LISTENER(install); DEFINE_ATTRIBUTE_EVENT_LISTENER(install);
...@@ -89,6 +93,7 @@ private: ...@@ -89,6 +93,7 @@ private:
PersistentWillBeMember<ServiceWorkerClients> m_clients; PersistentWillBeMember<ServiceWorkerClients> m_clients;
OwnPtr<FetchManager> m_fetchManager; OwnPtr<FetchManager> m_fetchManager;
PersistentWillBeMember<CacheStorage> m_caches; PersistentWillBeMember<CacheStorage> m_caches;
bool m_didEvaluateScript;
}; };
} // namespace blink } // namespace blink
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment