Fix a crashing call to GURL::spec() in downloads_api.cc:DownloadItemToJSON()
The actual bug is DownloadItemImpl::GetOriginalUrl(): the front() of an empty vector is not a good GURL reference!
The sprinkling of GURL::is_valid() is just to make me feel better.
There is still the open question of what happened to the downloads_url_chain records, but that is less urgent than stopping the crashes.
BUG=190096
Review URL: https://codereview.chromium.org/12607011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188602 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index 59cfbce7..3e56e27 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -484,8 +484,7 @@
}
const GURL& DownloadItemImpl::GetURL() const {
- return url_chain_.empty() ?
- GURL::EmptyGURL() : url_chain_.back();
+ return url_chain_.empty() ? GURL::EmptyGURL() : url_chain_.back();
}
const std::vector<GURL>& DownloadItemImpl::GetUrlChain() const {
@@ -493,7 +492,9 @@
}
const GURL& DownloadItemImpl::GetOriginalUrl() const {
- return url_chain_.front();
+ // Be careful about taking the front() of possibly-empty vectors!
+ // http://crbug.com/190096
+ return url_chain_.empty() ? GURL::EmptyGURL() : url_chain_.front();
}
const GURL& DownloadItemImpl::GetReferrerUrl() const {
@@ -731,12 +732,12 @@
if (!url_chain_.empty()) {
std::vector<GURL>::const_iterator iter = url_chain_.begin();
std::vector<GURL>::const_iterator last = url_chain_.end();
- url_list = (*iter).spec();
+ url_list = (*iter).is_valid() ? (*iter).spec() : "<invalid>";
++iter;
for ( ; verbose && (iter != last); ++iter) {
url_list += " ->\n\t";
const GURL& next_url = *iter;
- url_list += next_url.spec();
+ url_list += next_url.is_valid() ? next_url.spec() : "<invalid>";
}
}
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index b24bd0a..c9fe58c 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -57,7 +57,8 @@
scoped_ptr<net::URLRequest> request(
params->resource_context()->GetRequestContext()->CreateRequest(
params->url(), NULL));
- request->set_referrer(params->referrer().url.spec());
+ if (params->referrer().url.is_valid())
+ request->set_referrer(params->referrer().url.spec());
webkit_glue::ConfigureURLRequestForReferrerPolicy(
request.get(), params->referrer().policy);
request->set_load_flags(request->load_flags() | params->load_flags());