Refactor and rebase #380: Firefox reader view links

Fixes #366
Closes #380
This commit is contained in:
ArthurHoaro 2016-03-24 19:01:40 +01:00
parent ecd051905f
commit c9da01e749
2 changed files with 36 additions and 13 deletions

View file

@ -118,24 +118,41 @@ class Url
*/ */
public function __construct($url) public function __construct($url)
{ {
$this->parts = parse_url(trim($url)); $url = self::cleanupUnparsedUrl(trim($url));
$this->parts = parse_url($url);
if (!empty($url) && empty($this->parts['scheme'])) { if (!empty($url) && empty($this->parts['scheme'])) {
$this->parts['scheme'] = 'http'; $this->parts['scheme'] = 'http';
} }
} }
/**
* Clean up URL before it's parsed.
* ie. handle urlencode, url prefixes, etc.
*
* @param string $url URL to clean.
*
* @return string cleaned URL.
*/
protected static function cleanupUnparsedUrl($url)
{
return self::removeFirefoxAboutReader($url);
}
private function removeFirefoxAboutReader($input){ /**
$output_array = []; * Remove Firefox Reader prefix if it's present.
preg_match("%^about://reader\?url=(.*)%", $input, $output_array); *
if(!empty($output_array)){ * @param string $input url
$extractedUrl = preg_replace("%^about://reader\?url=(.*)%", "$1", $input); *
$url = urldecode($extractedUrl); * @return string cleaned url
}else{ */
$url = $input; protected static function removeFirefoxAboutReader($input)
} {
return $url; $firefoxPrefix = 'about://reader?url=';
if (startsWith($input, $firefoxPrefix)) {
return urldecode(ltrim($input, $firefoxPrefix));
}
return $input;
} }
/** /**
@ -200,8 +217,7 @@ public function cleanup()
{ {
$this->cleanupQuery(); $this->cleanupQuery();
$this->cleanupFragment(); $this->cleanupFragment();
$url = $this->toString(); return $this->toString();
return $this->removeFirefoxAboutReader($url);
} }
/** /**

View file

@ -128,6 +128,13 @@ public function testCleanupMixedContent()
self::$baseUrl.'?my=stuff&is=kept#again', self::$baseUrl.'?my=stuff&is=kept#again',
$url->cleanup() $url->cleanup()
); );
// test firefox reader url
$url = new Url(
'about://reader?url=' . urlencode(self::$baseUrl .'?my=stuff&is=kept')
);
$this->assertEquals(self::$baseUrl.'?my=stuff&is=kept', $url->cleanup());
} }
/** /**