OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "blimp/engine/session/blimp_engine_session.h" | 5 #include "blimp/engine/session/blimp_engine_session.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 | 65 |
66 namespace blimp { | 66 namespace blimp { |
67 namespace engine { | 67 namespace engine { |
68 namespace { | 68 namespace { |
69 | 69 |
70 const float kDefaultScaleFactor = 1.f; | 70 const float kDefaultScaleFactor = 1.f; |
71 const int kDefaultDisplayWidth = 800; | 71 const int kDefaultDisplayWidth = 800; |
72 const int kDefaultDisplayHeight = 600; | 72 const int kDefaultDisplayHeight = 600; |
73 const uint16_t kDefaultPort = 25467; | 73 const uint16_t kDefaultPort = 25467; |
74 | 74 |
| 75 const char kTcpTransport[] = "tcp"; |
| 76 const char kGrpcTransport[] = "grpc"; |
| 77 |
75 // Focus rules that support activating an child window. | 78 // Focus rules that support activating an child window. |
76 class FocusRulesImpl : public wm::BaseFocusRules { | 79 class FocusRulesImpl : public wm::BaseFocusRules { |
77 public: | 80 public: |
78 FocusRulesImpl() {} | 81 FocusRulesImpl() {} |
79 ~FocusRulesImpl() override {} | 82 ~FocusRulesImpl() override {} |
80 | 83 |
81 bool SupportsChildActivation(aura::Window* window) const override { | 84 bool SupportsChildActivation(aura::Window* window) const override { |
82 return true; | 85 return true; |
83 } | 86 } |
84 | 87 |
85 private: | 88 private: |
86 DISALLOW_COPY_AND_ASSIGN(FocusRulesImpl); | 89 DISALLOW_COPY_AND_ASSIGN(FocusRulesImpl); |
87 }; | 90 }; |
88 | 91 |
89 // Proxies calls to TaskRunner::PostTask while stripping the return value, | 92 // Proxies calls to TaskRunner::PostTask while stripping the return value, |
90 // which provides a suitable function prototype for binding a base::Closure. | 93 // which provides a suitable function prototype for binding a base::Closure. |
91 void PostTask(const scoped_refptr<base::TaskRunner>& task_runner, | 94 void PostTask(const scoped_refptr<base::TaskRunner>& task_runner, |
92 const base::Closure& closure) { | 95 const base::Closure& closure) { |
93 task_runner->PostTask(FROM_HERE, closure); | 96 task_runner->PostTask(FROM_HERE, closure); |
94 } | 97 } |
95 | 98 |
96 // Returns a closure that quits the current (bind-time) MessageLoop. | 99 // Returns a closure that quits the current (bind-time) MessageLoop. |
97 base::Closure QuitCurrentMessageLoopClosure() { | 100 base::Closure QuitCurrentMessageLoopClosure() { |
98 return base::Bind(&PostTask, base::ThreadTaskRunnerHandle::Get(), | 101 return base::Bind(&PostTask, base::ThreadTaskRunnerHandle::Get(), |
99 base::MessageLoop::QuitWhenIdleClosure()); | 102 base::MessageLoop::QuitWhenIdleClosure()); |
100 } | 103 } |
101 | 104 |
| 105 EngineConnectionManager::EngineTransportType GetTransportType() { |
| 106 const std::string transport_parsed = |
| 107 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| 108 kEngineTransport); |
| 109 if (transport_parsed == kTcpTransport || transport_parsed.empty()) { |
| 110 return EngineConnectionManager::EngineTransportType::TCP; |
| 111 } else if (transport_parsed == kGrpcTransport) { |
| 112 return EngineConnectionManager::EngineTransportType::GRPC; |
| 113 } |
| 114 LOG(FATAL) << "--engine-transport must either be empty or one of " |
| 115 << kGrpcTransport << ", " << kTcpTransport; |
| 116 return EngineConnectionManager::EngineTransportType::TCP; |
| 117 } |
| 118 |
102 net::IPAddress GetListeningAddress() { | 119 net::IPAddress GetListeningAddress() { |
103 if (base::CommandLine::ForCurrentProcess()->HasSwitch(kAllowNonLocalhost)) { | 120 if (base::CommandLine::ForCurrentProcess()->HasSwitch(kAllowNonLocalhost)) { |
104 return net::IPAddress::IPv4AllZeros(); | 121 return net::IPAddress::IPv4AllZeros(); |
105 } | 122 } |
106 return net::IPAddress::IPv4Localhost(); | 123 return net::IPAddress::IPv4Localhost(); |
107 } | 124 } |
108 | 125 |
109 uint16_t GetListeningPort() { | 126 uint16_t GetListeningPort() { |
110 unsigned port_parsed = 0; | 127 unsigned port_parsed = 0; |
111 if (!base::StringToUint( | 128 if (!base::StringToUint( |
(...skipping 20 matching lines...) Expand all Loading... |
132 explicit EngineNetworkComponents(net::NetLog* net_log); | 149 explicit EngineNetworkComponents(net::NetLog* net_log); |
133 ~EngineNetworkComponents() override; | 150 ~EngineNetworkComponents() override; |
134 | 151 |
135 // Sets up network components and starts listening for incoming connection. | 152 // Sets up network components and starts listening for incoming connection. |
136 // This should be called after all features have been registered so that | 153 // This should be called after all features have been registered so that |
137 // received messages can be properly handled. | 154 // received messages can be properly handled. |
138 void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 155 void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
139 base::WeakPtr<BlobChannelSender> blob_channel_sender, | 156 base::WeakPtr<BlobChannelSender> blob_channel_sender, |
140 const std::string& client_token); | 157 const std::string& client_token); |
141 | 158 |
| 159 // TODO(perumaal): Remove this once gRPC support is ready. |
| 160 // See crbug.com/659279. |
142 uint16_t GetPortForTesting() { return port_; } | 161 uint16_t GetPortForTesting() { return port_; } |
143 | 162 |
144 BrowserConnectionHandler* connection_handler() { | 163 BrowserConnectionHandler* connection_handler() { |
145 return &connection_handler_; | 164 return &connection_handler_; |
146 } | 165 } |
147 | 166 |
148 BlobChannelService* blob_channel_service() { | 167 BlobChannelService* blob_channel_service() { |
149 return blob_channel_service_.get(); | 168 return blob_channel_service_.get(); |
150 } | 169 } |
151 | 170 |
(...skipping 30 matching lines...) Expand all Loading... |
182 base::WeakPtr<BlobChannelSender> blob_channel_sender, | 201 base::WeakPtr<BlobChannelSender> blob_channel_sender, |
183 const std::string& client_token) { | 202 const std::string& client_token) { |
184 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 203 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
185 DCHECK(!connection_manager_); | 204 DCHECK(!connection_manager_); |
186 // Plumb authenticated connections from the authentication handler | 205 // Plumb authenticated connections from the authentication handler |
187 // to |this| (which will then pass it to |connection_handler_|. | 206 // to |this| (which will then pass it to |connection_handler_|. |
188 authentication_handler_ = | 207 authentication_handler_ = |
189 base::MakeUnique<EngineAuthenticationHandler>(this, client_token); | 208 base::MakeUnique<EngineAuthenticationHandler>(this, client_token); |
190 | 209 |
191 // Plumb unauthenticated connections to |authentication_handler_|. | 210 // Plumb unauthenticated connections to |authentication_handler_|. |
192 connection_manager_ = | 211 connection_manager_ = base::MakeUnique<EngineConnectionManager>( |
193 base::MakeUnique<EngineConnectionManager>(authentication_handler_.get()); | 212 authentication_handler_.get(), net_log_); |
194 | 213 |
195 blob_channel_service_ = | 214 blob_channel_service_ = |
196 base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner); | 215 base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner); |
197 | 216 |
198 // Adds BlimpTransports to connection_manager_. | 217 // Adds BlimpTransports to connection_manager_. |
199 net::IPEndPoint address(GetListeningAddress(), GetListeningPort()); | 218 net::IPEndPoint address(GetListeningAddress(), GetListeningPort()); |
200 TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_); | 219 connection_manager_->ConnectTransport(&address, GetTransportType()); |
201 connection_manager_->AddTransport(base::WrapUnique(transport)); | |
202 | |
203 transport->GetLocalAddress(&address); | |
204 port_ = address.port(); | 220 port_ = address.port(); |
205 DVLOG(1) << "Engine port #: " << port_; | |
206 } | 221 } |
207 | 222 |
208 void EngineNetworkComponents::HandleConnection( | 223 void EngineNetworkComponents::HandleConnection( |
209 std::unique_ptr<BlimpConnection> connection) { | 224 std::unique_ptr<BlimpConnection> connection) { |
210 // Observe |connection| for disconnection events. | 225 // Observe |connection| for disconnection events. |
211 connection->AddConnectionErrorObserver(this); | 226 connection->AddConnectionErrorObserver(this); |
212 connection_handler_.HandleConnection(std::move(connection)); | 227 connection_handler_.HandleConnection(std::move(connection)); |
213 } | 228 } |
214 | 229 |
215 void EngineNetworkComponents::OnConnectionError(int error) { | 230 void EngineNetworkComponents::OnConnectionError(int error) { |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 parent->AddChild(content); | 581 parent->AddChild(content); |
567 content->Show(); | 582 content->Show(); |
568 | 583 |
569 tab_ = base::MakeUnique<Tab>(std::move(new_contents), target_tab_id, | 584 tab_ = base::MakeUnique<Tab>(std::move(new_contents), target_tab_id, |
570 &render_widget_feature_, | 585 &render_widget_feature_, |
571 navigation_message_sender_.get()); | 586 navigation_message_sender_.get()); |
572 } | 587 } |
573 | 588 |
574 } // namespace engine | 589 } // namespace engine |
575 } // namespace blimp | 590 } // namespace blimp |
OLD | NEW |