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

Unified Diff: test/inspector/isolate-data.cc

Issue 2906153002: [inspector] Support multiple sessions per context group (Closed)
Patch Set: using set per kozy@ Created 3 years, 7 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
« no previous file with comments | « test/inspector/isolate-data.h ('k') | test/inspector/sessions/create-session.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/inspector/isolate-data.cc
diff --git a/test/inspector/isolate-data.cc b/test/inspector/isolate-data.cc
index c5b55d3bf17d1c4c62e2bd1ac116a6586deb1cf9..f56b2578c1aca676d36da4c9bc4a678eae96f79f 100644
--- a/test/inspector/isolate-data.cc
+++ b/test/inspector/isolate-data.cc
@@ -54,6 +54,7 @@ IsolateData::IsolateData(TaskRunner* task_runner,
isolate_->SetMicrotasksPolicy(v8::MicrotasksPolicy::kScoped);
if (with_inspector) {
isolate_->AddMessageListener(&IsolateData::MessageHandler);
+ isolate_->SetPromiseRejectCallback(&IsolateData::PromiseRejectHandler);
inspector_ = v8_inspector::V8Inspector::create(isolate_, this);
}
}
@@ -191,11 +192,11 @@ void IsolateData::DumpAsyncTaskStacksStateForTest() {
}
// static
-void IsolateData::MessageHandler(v8::Local<v8::Message> message,
- v8::Local<v8::Value> exception) {
+int IsolateData::HandleMessage(v8::Local<v8::Message> message,
+ v8::Local<v8::Value> exception) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Local<v8::Context> context = isolate->GetEnteredContext();
- if (context.IsEmpty()) return;
+ if (context.IsEmpty()) return 0;
v8_inspector::V8Inspector* inspector =
IsolateData::FromContext(context)->inspector_.get();
@@ -222,9 +223,51 @@ void IsolateData::MessageHandler(v8::Local<v8::Message> message,
}
v8_inspector::StringView url(url_string.start(), url_string.length());
- inspector->exceptionThrown(context, message_text, exception, detailed_message,
- url, line_number, column_number,
- inspector->createStackTrace(stack), script_id);
+ return inspector->exceptionThrown(
+ context, message_text, exception, detailed_message, url, line_number,
+ column_number, inspector->createStackTrace(stack), script_id);
+}
+
+// static
+void IsolateData::MessageHandler(v8::Local<v8::Message> message,
+ v8::Local<v8::Value> exception) {
+ HandleMessage(message, exception);
+}
+
+// static
+void IsolateData::PromiseRejectHandler(v8::PromiseRejectMessage data) {
+ v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ v8::Local<v8::Context> context = isolate->GetEnteredContext();
+ if (context.IsEmpty()) return;
+ v8::Local<v8::Promise> promise = data.GetPromise();
+ v8::Local<v8::Private> id_private = v8::Private::ForApi(
+ isolate,
+ v8::String::NewFromUtf8(isolate, "id", v8::NewStringType::kNormal)
+ .ToLocalChecked());
+
+ if (data.GetEvent() == v8::kPromiseHandlerAddedAfterReject) {
+ v8::Local<v8::Value> id;
+ if (!promise->GetPrivate(context, id_private).ToLocal(&id)) return;
+ if (!id->IsInt32()) return;
+ v8_inspector::V8Inspector* inspector =
+ IsolateData::FromContext(context)->inspector_.get();
+ const char* reason_str = "Handler added to rejected promise";
+ inspector->exceptionRevoked(
+ context, id.As<v8::Int32>()->Value(),
+ v8_inspector::StringView(reinterpret_cast<const uint8_t*>(reason_str),
+ strlen(reason_str)));
+ return;
+ }
+
+ v8::Local<v8::Value> exception = data.GetValue();
+ int exception_id = HandleMessage(
+ v8::Exception::CreateMessage(isolate, exception), exception);
+ if (exception_id) {
+ promise
+ ->SetPrivate(isolate->GetCurrentContext(), id_private,
+ v8::Int32::New(isolate, exception_id))
+ .ToChecked();
+ }
}
void IsolateData::FireContextCreated(v8::Local<v8::Context> context,
« no previous file with comments | « test/inspector/isolate-data.h ('k') | test/inspector/sessions/create-session.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698