Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit db1a9c2

Browse filesBrowse files
committed
[HttpKernel] Fix TimeDataCollector
In order for the `TimeDataCollector` to work properly the `X-Debug-Token` from the response header needs to be used which was removed in #42331 to fix #36623. Fixes #42804
1 parent 460fd35 commit db1a9c2
Copy full SHA for db1a9c2

File tree

2 files changed

+31
-6
lines changed
Filter options

2 files changed

+31
-6
lines changed

‎src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
+8-3Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected function beforeDispatch(string $eventName, $event)
4141
}
4242
break;
4343
case KernelEvents::TERMINATE:
44-
$sectionId = $event->getRequest()->attributes->get('_stopwatch_token');
44+
$sectionId = $this->determineStopwatchToken($event);
4545
if (null === $sectionId) {
4646
break;
4747
}
@@ -68,7 +68,7 @@ protected function afterDispatch(string $eventName, $event)
6868
$this->stopwatch->start('controller', 'section');
6969
break;
7070
case KernelEvents::RESPONSE:
71-
$sectionId = $event->getRequest()->attributes->get('_stopwatch_token');
71+
$sectionId = $this->determineStopwatchToken($event);
7272
if (null === $sectionId) {
7373
break;
7474
}
@@ -77,7 +77,7 @@ protected function afterDispatch(string $eventName, $event)
7777
case KernelEvents::TERMINATE:
7878
// In the special case described in the `preDispatch` method above, the `$token` section
7979
// does not exist, then closing it throws an exception which must be caught.
80-
$sectionId = $event->getRequest()->attributes->get('_stopwatch_token');
80+
$sectionId = $this->determineStopwatchToken($event);
8181
if (null === $sectionId) {
8282
break;
8383
}
@@ -88,4 +88,9 @@ protected function afterDispatch(string $eventName, $event)
8888
break;
8989
}
9090
}
91+
92+
private function determineStopwatchToken($event)
93+
{
94+
return $event->getResponse()->headers->get('X-Debug-Token') ?? $event->getRequest()->attributes->get('_stopwatch_token');
95+
}
9196
}

‎src/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php
+23-3Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@ public function testStopwatchSections()
4545
], array_keys($events));
4646
}
4747

48+
public function testStopwatchSectionsWithProfilerToken()
49+
{
50+
$dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch = new Stopwatch());
51+
$kernel = $this->getHttpKernel($dispatcher, new Response('', 200, ['X-Debug-Token' => '292e1e']));
52+
$request = Request::create('/');
53+
$response = $kernel->handle($request);
54+
$kernel->terminate($request, $response);
55+
56+
$events = $stopwatch->getSectionEvents($response->headers->get('X-Debug-Token'));
57+
$this->assertEquals([
58+
'__section__',
59+
'kernel.request',
60+
'kernel.controller',
61+
'kernel.controller_arguments',
62+
'controller',
63+
'kernel.response',
64+
'kernel.terminate',
65+
], array_keys($events));
66+
}
67+
4868
public function testStopwatchCheckControllerOnRequestEvent()
4969
{
5070
$stopwatch = $this->getMockBuilder(Stopwatch::class)
@@ -110,11 +130,11 @@ public function testListenerCanRemoveItselfWhenExecuted()
110130
$this->assertCount(1, $eventDispatcher->getListeners('foo'), 'expected listener1 to be removed');
111131
}
112132

113-
protected function getHttpKernel($dispatcher)
133+
protected function getHttpKernel($dispatcher, Response $response = null)
114134
{
115135
$controllerResolver = $this->createMock(ControllerResolverInterface::class);
116-
$controllerResolver->expects($this->once())->method('getController')->willReturn(function () {
117-
return new Response();
136+
$controllerResolver->expects($this->once())->method('getController')->willReturn(function () use ($response) {
137+
return $response ?? new Response();
118138
});
119139
$argumentResolver = $this->createMock(ArgumentResolverInterface::class);
120140
$argumentResolver->expects($this->once())->method('getArguments')->willReturn([]);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.