Chris@0: container->get('router.builder')->rebuild(); Chris@0: } Chris@0: Chris@0: /** Chris@17: * Gets arguments for FormattableMarkup based on Url::fromUri() parameters. Chris@0: * Chris@0: * @param string $uri Chris@0: * The URI of the resource. Chris@0: * @param array $options Chris@0: * The options to pass to Url::fromUri(). Chris@0: * Chris@0: * @return array Chris@0: * Array containing: Chris@0: * - ':url': A URL string. Chris@17: * Chris@17: * @see \Drupal\Component\Render\FormattableMarkup Chris@0: */ Chris@0: protected static function getSafeMarkupUriArgs($uri, $options = []) { Chris@0: $args[':url'] = Url::fromUri($uri, $options)->toString(); Chris@0: return $args; Chris@0: } Chris@0: Chris@0: /** Chris@17: * Tests URL ":placeholders" in \Drupal\Component\Render\FormattableMarkup. Chris@0: * Chris@0: * @dataProvider providerTestSafeMarkupUri Chris@0: */ Chris@0: public function testSafeMarkupUri($string, $uri, $options, $expected) { Chris@0: $args = self::getSafeMarkupUriArgs($uri, $options); Chris@17: $this->assertEquals($expected, new FormattableMarkup($string, $args)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return array Chris@0: */ Chris@0: public function providerTestSafeMarkupUri() { Chris@0: $data = []; Chris@0: $data['routed-url'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'route:system.admin', Chris@0: [], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: $data['routed-with-query'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'route:system.admin', Chris@0: ['query' => ['bar' => 'baz#']], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: $data['routed-with-fragment'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'route:system.admin', Chris@0: ['fragment' => 'bar<'], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: $data['unrouted-url'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'base://foo', Chris@0: [], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: $data['unrouted-with-query'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'base://foo', Chris@0: ['query' => ['bar' => 'baz#']], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: $data['unrouted-with-fragment'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'base://foo', Chris@0: ['fragment' => 'bar<'], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: $data['mailto-protocol'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'mailto:test@example.com', Chris@0: [], Chris@0: 'Hey giraffe MUUUH', Chris@0: ]; Chris@0: Chris@0: return $data; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider providerTestSafeMarkupUriWithException Chris@0: */ Chris@0: public function testSafeMarkupUriWithExceptionUri($string, $uri) { Chris@0: // Should throw an \InvalidArgumentException, due to Uri::toString(). Chris@0: $this->setExpectedException(\InvalidArgumentException::class); Chris@0: $args = self::getSafeMarkupUriArgs($uri); Chris@0: Chris@17: new FormattableMarkup($string, $args); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return array Chris@0: */ Chris@0: public function providerTestSafeMarkupUriWithException() { Chris@0: $data = []; Chris@0: $data['js-protocol'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: "javascript:alert('xss')", Chris@0: ]; Chris@0: $data['js-with-fromCharCode'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: "javascript:alert(String.fromCharCode(88,83,83))", Chris@0: ]; Chris@0: $data['non-url-with-colon'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: "llamas: they are not URLs", Chris@0: ]; Chris@0: $data['non-url-with-html'] = [ Chris@0: 'Hey giraffe MUUUH', Chris@0: 'not a url', Chris@0: ]; Chris@0: Chris@0: return $data; Chris@0: } Chris@0: Chris@0: }