Index: components/omnibox/search_suggestion_parser.cc |
diff --git a/components/omnibox/search_suggestion_parser.cc b/components/omnibox/search_suggestion_parser.cc |
index a481def345dee8aec352842f70e423d10125faeb..2fd1baba8509389bc982b613edb753c6e69f0406 100644 |
--- a/components/omnibox/search_suggestion_parser.cc |
+++ b/components/omnibox/search_suggestion_parser.cc |
@@ -17,6 +17,7 @@ |
#include "net/base/net_util.h" |
#include "net/http/http_response_headers.h" |
#include "net/url_request/url_fetcher.h" |
+#include "url/url_constants.h" |
namespace { |
@@ -483,22 +484,29 @@ void SearchSuggestionParser::GetAnswersImageURLs( |
const base::DictionaryValue* answer_json, |
std::vector<GURL>* urls) { |
DCHECK(answer_json); |
+ |
const base::ListValue* lines = NULL; |
- answer_json->GetList("l", &lines); |
- if (!lines || lines->GetSize() == 0) |
+ if (!answer_json->GetList("l", &lines) || !lines || lines->GetSize() == 0) |
return; |
- for (size_t line = 0; line < lines->GetSize(); ++line) { |
- const base::DictionaryValue* imageLine = NULL; |
- lines->GetDictionary(line, &imageLine); |
- if (!imageLine) |
+ for (base::ListValue::const_iterator iter = lines->begin(); |
+ iter != lines->end(); |
+ ++iter) { |
+ const base::DictionaryValue* line = NULL; |
+ if (!(*iter)->GetAsDictionary(&line) || !line) |
continue; |
- const base::DictionaryValue* imageData = NULL; |
- imageLine->GetDictionary("i", &imageData); |
- if (!imageData) |
+ |
+ std::string image_host_and_path; |
+ if (!line->GetString("il.i.d", &image_host_and_path) || |
+ image_host_and_path.empty()) |
continue; |
- std::string imageUrl; |
- imageData->GetString("d", &imageUrl); |
- urls->push_back(GURL(imageUrl)); |
+ // Concatenate scheme and host/path using only ':' as separator. This is |
+ // due to the results delivering strings of the form '//host/path', which |
+ // is web-speak for "use the enclosing page's scheme", but not a valid path |
+ // of an URL. |
+ GURL image_url( |
+ GURL(std::string(url::kHttpsScheme) + ":" + image_host_and_path)); |
+ if (image_url.is_valid()) |
+ urls->push_back(image_url); |
} |
} |