3 namespace Drupal\webprofiler\Controller;
5 use Drupal\Component\Serialization\Json;
6 use Drupal\Core\Controller\ControllerBase;
7 use Drupal\Core\Render\RendererInterface;
8 use Drupal\webprofiler\Profiler\Profiler;
9 use Drupal\webprofiler\Profiler\TemplateManager;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11 use Symfony\Component\HttpFoundation\JsonResponse;
12 use Symfony\Component\HttpFoundation\Request;
13 use Symfony\Component\HttpFoundation\Response;
14 use Symfony\Component\HttpKernel\Profiler\Profile;
17 * Class ToolbarController
19 class ToolbarController extends ControllerBase {
22 * @var \Drupal\webprofiler\Profiler\Profiler
27 * @var \Drupal\webprofiler\Profiler\TemplateManager
29 private $templateManager;
32 * @var \Drupal\Core\Render\RendererInterface
39 public static function create(ContainerInterface $container) {
41 $container->get('profiler'),
42 $container->get('template_manager'),
43 $container->get('renderer')
48 * Constructs a new WebprofilerController.
50 * @param \Drupal\webprofiler\Profiler\Profiler $profiler
51 * @param \Drupal\webprofiler\Profiler\TemplateManager $templateManager
52 * @param \Drupal\Core\Render\RendererInterface $renderer
54 public function __construct(Profiler $profiler, TemplateManager $templateManager, RendererInterface $renderer) {
55 $this->profiler = $profiler;
56 $this->templateManager = $templateManager;
57 $this->renderer = $renderer;
61 * Generates the toolbar.
63 * @param Profile $profile
67 public function toolbarAction(Profile $profile) {
68 $this->profiler->disable();
70 $templates = $this->templateManager->getTemplates($profile);
73 foreach ($templates as $name => $template) {
74 $rendered .= $template->renderBlock('toolbar', [
75 'collector' => $profile->getcollector($name),
76 'token' => $profile->getToken(),
82 '#theme' => 'webprofiler_toolbar',
83 '#toolbar' => $rendered,
84 '#token' => $profile->getToken(),
87 return new Response($this->renderer->render($toolbar));
91 * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
92 * @param \Symfony\Component\HttpFoundation\Request $request
94 * @return \Symfony\Component\HttpFoundation\JsonResponse
96 public function savePerformanceTimingAction(Profile $profile, Request $request) {
97 $this->profiler->disable();
99 $data = Json::decode($request->getContent());
101 /** @var $collector */
102 $collector = $profile->getCollector('performance_timing');
103 $collector->setData($data);
104 $this->profiler->updateProfile($profile);
106 return new JsonResponse(['success' => TRUE]);