Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit db1a9c2

Browse 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

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

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

Lines 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

Lines 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)