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/power_monitor/power_monitor.h" 9#include "base/strings/string_number_conversions.h" 10#include "base/strings/string_split.h" 11#include "base/strings/string_util.h" 12#include "net/http/http_network_session.h" 13#include "net/http/http_network_transaction.h" 14#include "net/http/http_server_properties_impl.h" 15#include "net/http/http_stream_factory_impl_job.h" 16#include "net/spdy/spdy_framer.h" 17#include "net/spdy/spdy_session.h" 18#include "net/spdy/spdy_session_pool.h" 19 20namespace net { 21 22//----------------------------------------------------------------------------- 23HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session) 24 : session_(session), 25 suspended_(false) { 26 DCHECK(session_.get()); 27#if defined(OS_WIN) 28 base::PowerMonitor* power_monitor = base::PowerMonitor::Get(); 29 if (power_monitor) 30 power_monitor->AddObserver(this); 31#endif 32} 33 34HttpNetworkLayer::~HttpNetworkLayer() { 35#if defined(OS_WIN) 36 base::PowerMonitor* power_monitor = base::PowerMonitor::Get(); 37 if (power_monitor) 38 power_monitor->RemoveObserver(this); 39#endif 40} 41 42//----------------------------------------------------------------------------- 43 44// static 45HttpTransactionFactory* HttpNetworkLayer::CreateFactory( 46 HttpNetworkSession* session) { 47 DCHECK(session); 48 49 return new HttpNetworkLayer(session); 50} 51 52// static 53void HttpNetworkLayer::ForceAlternateProtocol() { 54 AlternateProtocolInfo pair(443, NPN_SPDY_3, 1); 55 HttpServerPropertiesImpl::ForceAlternateProtocol(pair); 56} 57 58//----------------------------------------------------------------------------- 59 60int HttpNetworkLayer::CreateTransaction(RequestPriority priority, 61 scoped_ptr<HttpTransaction>* trans) { 62 if (suspended_) 63 return ERR_NETWORK_IO_SUSPENDED; 64 65 trans->reset(new HttpNetworkTransaction(priority, GetSession())); 66 return OK; 67} 68 69HttpCache* HttpNetworkLayer::GetCache() { 70 return NULL; 71} 72 73HttpNetworkSession* HttpNetworkLayer::GetSession() { return session_.get(); } 74 75void HttpNetworkLayer::OnSuspend() { 76 suspended_ = true; 77 78 if (session_.get()) 79 session_->CloseIdleConnections(); 80} 81 82void HttpNetworkLayer::OnResume() { 83 suspended_ = false; 84} 85 86} // namespace net 87