OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/url_request/url_request_http_job.h" | 5 #include "net/url_request/url_request_http_job.h" |
6 | 6 |
7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 // Handle the server notification of a new SDCH dictionary. | 321 // Handle the server notification of a new SDCH dictionary. |
322 SdchManager* sdch_manager(request()->context()->sdch_manager()); | 322 SdchManager* sdch_manager(request()->context()->sdch_manager()); |
323 if (sdch_manager) { | 323 if (sdch_manager) { |
324 SdchProblemCode rv = sdch_manager->IsInSupportedDomain(request()->url()); | 324 SdchProblemCode rv = sdch_manager->IsInSupportedDomain(request()->url()); |
325 if (rv != SDCH_OK) { | 325 if (rv != SDCH_OK) { |
326 // If SDCH is just disabled, it is not a real error. | 326 // If SDCH is just disabled, it is not a real error. |
327 if (rv != SDCH_DISABLED && rv != SDCH_SECURE_SCHEME_NOT_SUPPORTED) { | 327 if (rv != SDCH_DISABLED && rv != SDCH_SECURE_SCHEME_NOT_SUPPORTED) { |
328 SdchManager::SdchErrorRecovery(rv); | 328 SdchManager::SdchErrorRecovery(rv); |
329 request()->net_log().AddEvent( | 329 request()->net_log().AddEvent( |
330 NetLog::TYPE_SDCH_DECODING_ERROR, | 330 NetLog::TYPE_SDCH_DECODING_ERROR, |
331 base::Bind(&NetLogSdchResourceProblemCallback, rv)); | 331 base::Bind(NetLogSdchResourceProblemCallback, rv)); |
332 } | 332 } |
333 } else { | 333 } else { |
334 const std::string name = "Get-Dictionary"; | 334 const std::string name = "Get-Dictionary"; |
335 std::string url_text; | 335 std::string url_text; |
336 void* iter = NULL; | 336 void* iter = NULL; |
337 // TODO(jar): We need to not fetch dictionaries the first time they are | 337 // TODO(jar): We need to not fetch dictionaries the first time they are |
338 // seen, but rather wait until we can justify their usefulness. | 338 // seen, but rather wait until we can justify their usefulness. |
339 // For now, we will only fetch the first dictionary, which will at least | 339 // For now, we will only fetch the first dictionary, which will at least |
340 // require multiple suggestions before we get additional ones for this | 340 // require multiple suggestions before we get additional ones for this |
341 // site. Eventually we should wait until a dictionary is requested | 341 // site. Eventually we should wait until a dictionary is requested |
342 // several times | 342 // several times |
343 // before we even download it (so that we don't waste memory or | 343 // before we even download it (so that we don't waste memory or |
344 // bandwidth). | 344 // bandwidth). |
345 if (GetResponseHeaders()->EnumerateHeader(&iter, name, &url_text)) { | 345 if (GetResponseHeaders()->EnumerateHeader(&iter, name, &url_text)) { |
346 // Resolve suggested URL relative to request url. | 346 // Resolve suggested URL relative to request url. |
347 GURL sdch_dictionary_url = request_->url().Resolve(url_text); | 347 GURL sdch_dictionary_url = request_->url().Resolve(url_text); |
348 if (sdch_dictionary_url.is_valid()) { | 348 if (sdch_dictionary_url.is_valid()) { |
349 rv = sdch_manager->OnGetDictionary(request_->url(), | 349 rv = sdch_manager->OnGetDictionary(request_->url(), |
350 sdch_dictionary_url); | 350 sdch_dictionary_url); |
351 if (rv != SDCH_OK) { | 351 if (rv != SDCH_OK) { |
352 SdchManager::SdchErrorRecovery(rv); | 352 SdchManager::SdchErrorRecovery(rv); |
353 request_->net_log().AddEvent( | 353 request_->net_log().AddEvent( |
354 NetLog::TYPE_SDCH_DICTIONARY_ERROR, | 354 NetLog::TYPE_SDCH_DICTIONARY_ERROR, |
355 base::Bind(&NetLogSdchDictionaryFetchProblemCallback, rv, | 355 base::Bind(NetLogSdchDictionaryFetchProblemCallback, rv, |
356 sdch_dictionary_url, false)); | 356 sdch_dictionary_url, false)); |
357 } | 357 } |
358 } | 358 } |
359 } | 359 } |
360 } | 360 } |
361 } | 361 } |
362 | 362 |
363 // Handle the server signalling no SDCH encoding. | 363 // Handle the server signalling no SDCH encoding. |
364 if (dictionaries_advertised_) { | 364 if (dictionaries_advertised_) { |
365 // We are wary of proxies that discard or damage SDCH encoding. If a server | 365 // We are wary of proxies that discard or damage SDCH encoding. If a server |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 bool advertise_sdch = sdch_manager != NULL && request()->method() != "POST"; | 538 bool advertise_sdch = sdch_manager != NULL && request()->method() != "POST"; |
539 if (advertise_sdch) { | 539 if (advertise_sdch) { |
540 SdchProblemCode rv = sdch_manager->IsInSupportedDomain(request()->url()); | 540 SdchProblemCode rv = sdch_manager->IsInSupportedDomain(request()->url()); |
541 if (rv != SDCH_OK) { | 541 if (rv != SDCH_OK) { |
542 advertise_sdch = false; | 542 advertise_sdch = false; |
543 // If SDCH is just disabled, it is not a real error. | 543 // If SDCH is just disabled, it is not a real error. |
544 if (rv != SDCH_DISABLED && rv != SDCH_SECURE_SCHEME_NOT_SUPPORTED) { | 544 if (rv != SDCH_DISABLED && rv != SDCH_SECURE_SCHEME_NOT_SUPPORTED) { |
545 SdchManager::SdchErrorRecovery(rv); | 545 SdchManager::SdchErrorRecovery(rv); |
546 request()->net_log().AddEvent( | 546 request()->net_log().AddEvent( |
547 NetLog::TYPE_SDCH_DECODING_ERROR, | 547 NetLog::TYPE_SDCH_DECODING_ERROR, |
548 base::Bind(&NetLogSdchResourceProblemCallback, rv)); | 548 base::Bind(NetLogSdchResourceProblemCallback, rv)); |
549 } | 549 } |
550 } | 550 } |
551 } | 551 } |
552 if (advertise_sdch) { | 552 if (advertise_sdch) { |
553 dictionaries_advertised_ = | 553 dictionaries_advertised_ = |
554 sdch_manager->GetDictionarySet(request_->url()); | 554 sdch_manager->GetDictionarySet(request_->url()); |
555 } | 555 } |
556 | 556 |
557 // The AllowLatencyExperiment() is only true if we've successfully done a | 557 // The AllowLatencyExperiment() is only true if we've successfully done a |
558 // full SDCH compression recently in this browser session for this host. | 558 // full SDCH compression recently in this browser session for this host. |
(...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1516 return override_response_headers_.get() ? | 1516 return override_response_headers_.get() ? |
1517 override_response_headers_.get() : | 1517 override_response_headers_.get() : |
1518 transaction_->GetResponseInfo()->headers.get(); | 1518 transaction_->GetResponseInfo()->headers.get(); |
1519 } | 1519 } |
1520 | 1520 |
1521 void URLRequestHttpJob::NotifyURLRequestDestroyed() { | 1521 void URLRequestHttpJob::NotifyURLRequestDestroyed() { |
1522 awaiting_callback_ = false; | 1522 awaiting_callback_ = false; |
1523 } | 1523 } |
1524 | 1524 |
1525 } // namespace net | 1525 } // namespace net |
OLD | NEW |