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 "content/browser/renderer_host/socket_stream_host.h" | 5 #include "content/browser/renderer_host/socket_stream_host.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "content/common/socket_stream.h" | 8 #include "content/common/socket_stream.h" |
9 #include "content/public/browser/content_browser_client.h" | |
10 #include "net/socket_stream/socket_stream_job.h" | 9 #include "net/socket_stream/socket_stream_job.h" |
11 #include "net/url_request/url_request_context.h" | 10 #include "net/url_request/url_request_context.h" |
12 | 11 |
13 namespace content { | 12 namespace content { |
14 namespace { | 13 namespace { |
15 | 14 |
16 const char* kSocketIdKey = "socketId"; | 15 const char* kSocketIdKey = "socketId"; |
17 | 16 |
18 class SocketStreamId : public net::SocketStream::UserData { | 17 class SocketStreamId : public net::SocketStream::UserData { |
19 public: | 18 public: |
20 explicit SocketStreamId(int socket_id) : socket_id_(socket_id) {} | 19 explicit SocketStreamId(int socket_id) : socket_id_(socket_id) {} |
21 virtual ~SocketStreamId() {} | 20 virtual ~SocketStreamId() {} |
22 int socket_id() const { return socket_id_; } | 21 int socket_id() const { return socket_id_; } |
23 | 22 |
24 private: | 23 private: |
25 int socket_id_; | 24 int socket_id_; |
26 }; | 25 }; |
27 | 26 |
28 } // namespace | 27 } // namespace |
29 | 28 |
30 SocketStreamHost::SocketStreamHost( | 29 SocketStreamHost::SocketStreamHost( |
31 net::SocketStream::Delegate* delegate, | 30 net::SocketStream::Delegate* delegate, |
32 int child_id, | |
33 int render_frame_id, | 31 int render_frame_id, |
34 int socket_id) | 32 int socket_id) |
35 : delegate_(delegate), | 33 : delegate_(delegate), |
36 child_id_(child_id), | |
37 render_frame_id_(render_frame_id), | 34 render_frame_id_(render_frame_id), |
38 socket_id_(socket_id) { | 35 socket_id_(socket_id) { |
39 DCHECK_NE(socket_id_, kNoSocketId); | 36 DCHECK_NE(socket_id_, kNoSocketId); |
40 VLOG(1) << "SocketStreamHost: render_frame_id=" << render_frame_id | 37 VLOG(1) << "SocketStreamHost: render_frame_id=" << render_frame_id |
41 << " socket_id=" << socket_id_; | 38 << " socket_id=" << socket_id_; |
42 } | 39 } |
43 | 40 |
44 /* static */ | 41 /* static */ |
45 int SocketStreamHost::SocketIdFromSocketStream( | 42 int SocketStreamHost::SocketIdFromSocketStream( |
46 const net::SocketStream* socket) { | 43 const net::SocketStream* socket) { |
47 net::SocketStream::UserData* d = socket->GetUserData(kSocketIdKey); | 44 net::SocketStream::UserData* d = socket->GetUserData(kSocketIdKey); |
48 if (d) { | 45 if (d) { |
49 SocketStreamId* socket_stream_id = static_cast<SocketStreamId*>(d); | 46 SocketStreamId* socket_stream_id = static_cast<SocketStreamId*>(d); |
50 return socket_stream_id->socket_id(); | 47 return socket_stream_id->socket_id(); |
51 } | 48 } |
52 return kNoSocketId; | 49 return kNoSocketId; |
53 } | 50 } |
54 | 51 |
55 SocketStreamHost::~SocketStreamHost() { | 52 SocketStreamHost::~SocketStreamHost() { |
56 VLOG(1) << "SocketStreamHost destructed socket_id=" << socket_id_; | 53 VLOG(1) << "SocketStreamHost destructed socket_id=" << socket_id_; |
57 job_->DetachContext(); | 54 job_->set_context(NULL); |
58 job_->DetachDelegate(); | 55 job_->DetachDelegate(); |
59 } | 56 } |
60 | 57 |
61 void SocketStreamHost::Connect(const GURL& url, | 58 void SocketStreamHost::Connect(const GURL& url, |
62 net::URLRequestContext* request_context) { | 59 net::URLRequestContext* request_context) { |
63 VLOG(1) << "SocketStreamHost::Connect url=" << url; | 60 VLOG(1) << "SocketStreamHost::Connect url=" << url; |
64 job_ = net::SocketStreamJob::CreateSocketStreamJob( | 61 job_ = net::SocketStreamJob::CreateSocketStreamJob( |
65 url, delegate_, request_context->transport_security_state(), | 62 url, delegate_, request_context->transport_security_state(), |
66 request_context->ssl_config_service(), | 63 request_context->ssl_config_service()); |
67 request_context, | 64 job_->set_context(request_context); |
68 GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( | |
69 child_id_)); | |
70 job_->SetUserData(kSocketIdKey, new SocketStreamId(socket_id_)); | 65 job_->SetUserData(kSocketIdKey, new SocketStreamId(socket_id_)); |
71 job_->Connect(); | 66 job_->Connect(); |
72 } | 67 } |
73 | 68 |
74 bool SocketStreamHost::SendData(const std::vector<char>& data) { | 69 bool SocketStreamHost::SendData(const std::vector<char>& data) { |
75 VLOG(1) << "SocketStreamHost::SendData"; | 70 VLOG(1) << "SocketStreamHost::SendData"; |
76 return job_.get() && job_->SendData(&data[0], data.size()); | 71 return job_.get() && job_->SendData(&data[0], data.size()); |
77 } | 72 } |
78 | 73 |
79 void SocketStreamHost::Close() { | 74 void SocketStreamHost::Close() { |
(...skipping 18 matching lines...) Expand all Loading... |
98 } | 93 } |
99 | 94 |
100 void SocketStreamHost::ContinueDespiteError() { | 95 void SocketStreamHost::ContinueDespiteError() { |
101 VLOG(1) << "SocketStreamHost::ContinueDespiteError"; | 96 VLOG(1) << "SocketStreamHost::ContinueDespiteError"; |
102 if (!job_.get()) | 97 if (!job_.get()) |
103 return; | 98 return; |
104 job_->ContinueDespiteError(); | 99 job_->ContinueDespiteError(); |
105 } | 100 } |
106 | 101 |
107 } // namespace content | 102 } // namespace content |
OLD | NEW |