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 3 // found in the LICENSE file. 4 5 #include "net/http/http_network_layer.h" 6 7 #include "base/logging.h" 8 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_split.h" 10 #include "base/strings/string_util.h" 11 #include "net/http/http_network_session.h" 12 #include "net/http/http_network_transaction.h" 13 #include "net/http/http_server_properties_impl.h" 14 #include "net/http/http_stream_factory_impl_job.h" 15 #include "net/spdy/spdy_framer.h" 16 #include "net/spdy/spdy_session.h" 17 #include "net/spdy/spdy_session_pool.h" 18 19 namespace net { 20 21 //----------------------------------------------------------------------------- 22 HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session) 23 : session_(session), 24 suspended_(false) { 25 DCHECK(session_.get()); 26 } 27 28 HttpNetworkLayer::~HttpNetworkLayer() { 29 } 30 31 //----------------------------------------------------------------------------- 32 33 // static 34 HttpTransactionFactory* HttpNetworkLayer::CreateFactory( 35 HttpNetworkSession* session) { 36 DCHECK(session); 37 38 return new HttpNetworkLayer(session); 39 } 40 41 // static 42 void HttpNetworkLayer::ForceAlternateProtocol() { 43 PortAlternateProtocolPair pair; 44 pair.port = 443; 45 pair.protocol = NPN_SPDY_2; 46 HttpServerPropertiesImpl::ForceAlternateProtocol(pair); 47 } 48 49 //----------------------------------------------------------------------------- 50 51 int HttpNetworkLayer::CreateTransaction(RequestPriority priority, 52 scoped_ptr<HttpTransaction>* trans, 53 HttpTransactionDelegate* delegate) { 54 if (suspended_) 55 return ERR_NETWORK_IO_SUSPENDED; 56 57 trans->reset(new HttpNetworkTransaction(priority, GetSession())); 58 return OK; 59 } 60 61 HttpCache* HttpNetworkLayer::GetCache() { 62 return NULL; 63 } 64 65 HttpNetworkSession* HttpNetworkLayer::GetSession() { return session_.get(); } 66 67 void HttpNetworkLayer::OnSuspend() { 68 suspended_ = true; 69 70 if (session_.get()) 71 session_->CloseIdleConnections(); 72 } 73 74 void HttpNetworkLayer::OnResume() { 75 suspended_ = false; 76 } 77 78 } // namespace net 79