Home | History | Annotate | Download | only in socket_stream
      1 // Copyright (c) 2011 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/socket_stream/socket_stream_job.h"
      6 
      7 #include "base/memory/singleton.h"
      8 #include "net/base/transport_security_state.h"
      9 #include "net/socket_stream/socket_stream_job_manager.h"
     10 #include "net/url_request/url_request_context.h"
     11 
     12 namespace net {
     13 
     14 // static
     15 SocketStreamJob::ProtocolFactory* SocketStreamJob::RegisterProtocolFactory(
     16     const std::string& scheme, ProtocolFactory* factory) {
     17   return SocketStreamJobManager::GetInstance()->RegisterProtocolFactory(
     18       scheme, factory);
     19 }
     20 
     21 // static
     22 SocketStreamJob* SocketStreamJob::CreateSocketStreamJob(
     23     const GURL& url,
     24     SocketStream::Delegate* delegate,
     25     const URLRequestContext& context) {
     26   GURL socket_url(url);
     27   TransportSecurityState::DomainState domain_state;
     28   if (url.scheme() == "ws" &&
     29       context.transport_security_state() &&
     30       context.transport_security_state()->IsEnabledForHost(
     31           &domain_state, url.host(), context.IsSNIAvailable()) &&
     32       domain_state.mode == TransportSecurityState::DomainState::MODE_STRICT) {
     33     url_canon::Replacements<char> replacements;
     34     static const char kNewScheme[] = "wss";
     35     replacements.SetScheme(kNewScheme,
     36                            url_parse::Component(0, strlen(kNewScheme)));
     37     socket_url = url.ReplaceComponents(replacements);
     38   }
     39   return SocketStreamJobManager::GetInstance()->CreateJob(socket_url, delegate);
     40 }
     41 
     42 SocketStreamJob::SocketStreamJob() {}
     43 
     44 SocketStream::UserData* SocketStreamJob::GetUserData(const void* key) const {
     45   return socket_->GetUserData(key);
     46 }
     47 
     48 void SocketStreamJob::SetUserData(const void* key,
     49                                   SocketStream::UserData* data) {
     50   socket_->SetUserData(key, data);
     51 }
     52 
     53 void SocketStreamJob::Connect() {
     54   socket_->Connect();
     55 }
     56 
     57 bool SocketStreamJob::SendData(const char* data, int len) {
     58   return socket_->SendData(data, len);
     59 }
     60 
     61 void SocketStreamJob::Close() {
     62   socket_->Close();
     63 }
     64 
     65 void SocketStreamJob::RestartWithAuth(const string16& username,
     66                                       const string16& password) {
     67   socket_->RestartWithAuth(username, password);
     68 }
     69 
     70 void SocketStreamJob::DetachDelegate() {
     71   socket_->DetachDelegate();
     72 }
     73 
     74 SocketStreamJob::~SocketStreamJob() {}
     75 
     76 }  // namespace net
     77