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

Unified Diff: Source/modules/serviceworkers/RespondWithObserver.cpp

Issue 641083002: Propagate error/exception information for rejected Promises in Service workers. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 2 months 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/serviceworkers/RespondWithObserver.cpp
diff --git a/Source/modules/serviceworkers/RespondWithObserver.cpp b/Source/modules/serviceworkers/RespondWithObserver.cpp
index 40b8ee6977e95443b5513ed7179a5bab7266d26b..a55aed7cd56f034d491643853333db10fc751fcf 100644
--- a/Source/modules/serviceworkers/RespondWithObserver.cpp
+++ b/Source/modules/serviceworkers/RespondWithObserver.cpp
@@ -9,15 +9,23 @@
#include "bindings/core/v8/ScriptPromise.h"
#include "bindings/core/v8/ScriptValue.h"
#include "bindings/core/v8/V8Binding.h"
+#include "bindings/core/v8/V8ErrorEvent.h"
#include "bindings/modules/v8/V8Response.h"
#include "core/dom/ExecutionContext.h"
+#include "core/events/ErrorEvent.h"
#include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "public/platform/WebServiceWorkerResponse.h"
#include "wtf/Assertions.h"
#include "wtf/RefPtr.h"
+#include "core/workers/WorkerGlobalScope.h"
+#include "core/workers/WorkerThread.h"
+#include "core/workers/WorkerReportingProxy.h"
+#include "core/dom/ExecutionContext.h"
#include <v8.h>
+#include "base/logging.h"
+
namespace blink {
class RespondWithObserver::ThenFunction FINAL : public ScriptFunction {
@@ -52,7 +60,7 @@ private:
ASSERT(m_observer);
ASSERT(m_resolveType == Fulfilled || m_resolveType == Rejected);
if (m_resolveType == Rejected)
- m_observer->responseWasRejected();
+ m_observer->responseWasRejected(value);
else
m_observer->responseWasFulfilled(value);
m_observer = nullptr;
@@ -97,9 +105,22 @@ void RespondWithObserver::respondWith(ScriptState* scriptState, const ScriptValu
ThenFunction::createFunction(scriptState, this, ThenFunction::Rejected));
}
-void RespondWithObserver::responseWasRejected()
+void RespondWithObserver::responseWasRejected(const ScriptValue& value)
{
+ VLOG(1) <<__FUNCTION__;
ASSERT(executionContext());
+ if(V8ErrorEvent::hasInstance(value.v8Value(), toIsolate(executionContext()))) {
+ ErrorEvent* errEvent = V8ErrorEvent::toImplWithTypeCheck(toIsolate(executionContext()), value.v8Value());
+ toWorkerGlobalScope(executionContext())->thread()->workerReportingProxy()
+ .reportException(errEvent->message(),
+ errEvent->lineno(),
+ errEvent->colno(),
+ errEvent->filename());
+
+ VLOG(1) << errEvent->message().ascii().data();
+ VLOG(1) << errEvent->filename().ascii().data()<< " : "<< errEvent->lineno() << " : " << errEvent->colno();
+ }
+
// The default value of WebServiceWorkerResponse's status is 0, which maps
// to a network error.
WebServiceWorkerResponse webResponse;
@@ -111,7 +132,7 @@ void RespondWithObserver::responseWasFulfilled(const ScriptValue& value)
{
ASSERT(executionContext());
if (!V8Response::hasInstance(value.v8Value(), toIsolate(executionContext()))) {
- responseWasRejected();
+ responseWasRejected(value);
return;
}
Response* response = V8Response::toImplWithTypeCheck(toIsolate(executionContext()), value.v8Value());
@@ -119,12 +140,12 @@ void RespondWithObserver::responseWasFulfilled(const ScriptValue& value)
// |no CORS| or |response|'s type is |error|, return a network error."
const FetchResponseData::Type responseType = response->response()->type();
if ((responseType == FetchResponseData::OpaqueType && m_requestMode != WebURLRequest::FetchRequestModeNoCORS) || responseType == FetchResponseData::ErrorType) {
- responseWasRejected();
+ responseWasRejected(value);
return;
}
// Treat the opaque response as a network error for frame loading.
if (responseType == FetchResponseData::OpaqueType && m_frameType != WebURLRequest::FrameTypeNone) {
- responseWasRejected();
+ responseWasRejected(value);
return;
}
WebServiceWorkerResponse webResponse;
« no previous file with comments | « Source/modules/serviceworkers/RespondWithObserver.h ('k') | Source/modules/serviceworkers/WaitUntilObserver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698