| Index: trunk/src/net/url_request/url_request_http_job.cc
|
| ===================================================================
|
| --- trunk/src/net/url_request/url_request_http_job.cc (revision 188924)
|
| +++ trunk/src/net/url_request/url_request_http_job.cc (working copy)
|
| @@ -43,7 +43,6 @@
|
| #include "net/url_request/url_request.h"
|
| #include "net/url_request/url_request_context.h"
|
| #include "net/url_request/url_request_error_job.h"
|
| -#include "net/url_request/url_request_job_factory.h"
|
| #include "net/url_request/url_request_redirect_job.h"
|
| #include "net/url_request/url_request_throttler_header_adapter.h"
|
| #include "net/url_request/url_request_throttler_manager.h"
|
| @@ -1014,16 +1013,25 @@
|
| }
|
|
|
| bool URLRequestHttpJob::IsSafeRedirect(const GURL& location) {
|
| - // HTTP is always safe.
|
| - // TODO(pauljensen): Remove once crbug.com/146591 is fixed.
|
| - if (location.is_valid() &&
|
| - (location.scheme() == "http" || location.scheme() == "https")) {
|
| + // We only allow redirects to certain "safe" protocols. This does not
|
| + // restrict redirects to externally handled protocols. Our consumer would
|
| + // need to take care of those.
|
| +
|
| + if (!URLRequest::IsHandledURL(location))
|
| return true;
|
| +
|
| + static const char* kSafeSchemes[] = {
|
| + "http",
|
| + "https",
|
| + "ftp"
|
| + };
|
| +
|
| + for (size_t i = 0; i < arraysize(kSafeSchemes); ++i) {
|
| + if (location.SchemeIs(kSafeSchemes[i]))
|
| + return true;
|
| }
|
| - // Query URLRequestJobFactory as to whether |location| would be safe to
|
| - // redirect to.
|
| - return request_->context()->job_factory() &&
|
| - request_->context()->job_factory()->IsSafeRedirectTarget(location);
|
| +
|
| + return false;
|
| }
|
|
|
| bool URLRequestHttpJob::NeedsAuth() {
|
|
|