[BrowserKit] fixed BC break done recently

This commit is contained in:
Fabien Potencier 2013-04-29 22:22:06 +02:00
parent 372a76a453
commit 25b8b84f65
1 changed files with 36 additions and 6 deletions

View File

@ -37,6 +37,11 @@ class CookieJar
/**
* Gets a cookie by name.
*
* You should never use an empty domain, but if you do so,
* this method returns the first cookie for the given name/path
* (this behavior ensures a BC behavior with previous versions of
* Symfony).
*
* @param string $name The cookie name
* @param string $path The cookie path
* @param string $domain The cookie domain
@ -49,12 +54,27 @@ class CookieJar
{
$this->flushExpiredCookies();
return isset($this->cookieJar[$domain][$path][$name]) ? $this->cookieJar[$domain][$path][$name] : null;
if (!empty($domain)) {
return isset($this->cookieJar[$domain][$path][$name]) ? $this->cookieJar[$domain][$path][$name] : null;
}
// avoid relying on this behavior that is mainly here for BC reasons
foreach ($this->cookieJar as $domain => $cookies) {
if (isset($cookies[$path][$name])) {
return $cookies[$path][$name];
}
}
return null;
}
/**
* Removes a cookie by name.
*
* You should never use an empty domain, but if you do so,
* all cookies for the given name/path expire (this behavior
* ensures a BC behavior with previous versions of Symfony).
*
* @param string $name The cookie name
* @param string $path The cookie path
* @param string $domain The cookie domain
@ -67,13 +87,23 @@ class CookieJar
$path = '/';
}
unset($this->cookieJar[$domain][$path][$name]);
if (empty($domain)) {
// an empty domain means any domain
// this should never happen but it allows for a better BC
$domains = array_keys($this->cookieJar);
} else {
$domains = array($domain);
}
if (empty($this->cookieJar[$domain][$path])) {
unset($this->cookieJar[$domain][$path]);
foreach ($domains as $domain) {
unset($this->cookieJar[$domain][$path][$name]);
if (empty($this->cookieJar[$domain])) {
unset($this->cookieJar[$domain]);
if (empty($this->cookieJar[$domain][$path])) {
unset($this->cookieJar[$domain][$path]);
if (empty($this->cookieJar[$domain])) {
unset($this->cookieJar[$domain]);
}
}
}
}