Chromium Code Reviews| Index: pdf/document_loader.cc |
| diff --git a/pdf/document_loader.cc b/pdf/document_loader.cc |
| index ea4b664b27b53afccc3f6ccb50e23eae456a7ab9..ebc7174e84e3cf445c61c83b5141e92cc1ba86bb 100644 |
| --- a/pdf/document_loader.cc |
| +++ b/pdf/document_loader.cc |
| @@ -19,6 +19,20 @@ namespace chrome_pdf { |
| namespace { |
| +// Return true if the HTTP response of |loader| is a succesful one and loading |
|
Lei Zhang
2016/11/03 07:10:45
typo
raymes
2016/11/07 03:25:44
Done.
|
| +// should continue. 4xx error indicate subsequent requests will fail too. |
| +// e.g. resource has been removed from the server while loading it. 301 |
| +// indicates a redirect was returned which won't be successful because we |
| +// disable following redirects for PDF loading (we assume they are already |
| +// resolved by the browser. |
| +bool ResponseStatusSuccess(const pp::URLLoader& loader) { |
| + int32_t http_code = loader.GetResponseInfo().GetStatusCode(); |
| + if ((http_code >= 400 && http_code < 500) || http_code == 301) |
|
Lei Zhang
2016/11/03 07:10:45
Just: return (http_code < 400 && http_code != 301)
raymes
2016/11/07 03:25:44
Done.
|
| + return false; |
| + |
| + return true; |
| +} |
| + |
| // If the headers have a byte-range response, writes the start and end |
| // positions and returns true if at least the start position was parsed. |
| // The end position will be set to 0 if it was not found or parsed from the |
| @@ -102,6 +116,10 @@ bool DocumentLoader::Init(const pp::URLLoader& loader, |
| url_ = url; |
| loader_ = loader; |
| + // Check that the initial response status is a valid one. |
| + if (!ResponseStatusSuccess(loader_)) |
| + return false; |
| + |
| std::string response_headers; |
| if (!headers.empty()) { |
| response_headers = headers; |
| @@ -358,12 +376,8 @@ void DocumentLoader::DidOpen(int32_t result) { |
| return; |
| } |
| - int32_t http_code = loader_.GetResponseInfo().GetStatusCode(); |
| - if (http_code >= 400 && http_code < 500) { |
| - // Error accessing resource. 4xx error indicate subsequent requests |
| - // will fail too. |
| - // E.g. resource has been removed from the server while loading it. |
| - // https://code.google.com/p/chromium/issues/detail?id=414827 |
| + if (!ResponseStatusSuccess(loader_)) { |
| + client_->DocumentLoadFailed(); |
| return; |
| } |