summaryrefslogtreecommitdiffstats
path: root/blimp/engine
diff options
context:
space:
mode:
authorhaibinlu <haibinlu@chromium.org>2015-12-17 17:37:38 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-18 01:38:20 +0000
commit3843192fb540302ab1e488e9d1d34afb789c6e45 (patch)
tree59e85e33109186dbc6dbc6a11b124af9c661e7b7 /blimp/engine
parent36dd3c0dd907d5ec59552a43be85cfb43c57c4b6 (diff)
downloadchromium_src-3843192fb540302ab1e488e9d1d34afb789c6e45.zip
chromium_src-3843192fb540302ab1e488e9d1d34afb789c6e45.tar.gz
chromium_src-3843192fb540302ab1e488e9d1d34afb789c6e45.tar.bz2
BlimpNetworkComponents for initializing network stack on IO thread.
Review URL: https://codereview.chromium.org/1523463002 Cr-Commit-Position: refs/heads/master@{#365971}
Diffstat (limited to 'blimp/engine')
-rw-r--r--blimp/engine/browser/blimp_browser_main_parts.cc3
-rw-r--r--blimp/engine/browser/blimp_engine_session.cc68
-rw-r--r--blimp/engine/browser/blimp_engine_session.h20
3 files changed, 84 insertions, 7 deletions
diff --git a/blimp/engine/browser/blimp_browser_main_parts.cc b/blimp/engine/browser/blimp_browser_main_parts.cc
index 992f740..6265725 100644
--- a/blimp/engine/browser/blimp_browser_main_parts.cc
+++ b/blimp/engine/browser/blimp_browser_main_parts.cc
@@ -36,7 +36,8 @@ void BlimpBrowserMainParts::PreMainMessageLoopRun() {
net_log_.reset(new net::NetLog());
scoped_ptr<BlimpBrowserContext> browser_context(
new BlimpBrowserContext(false, net_log_.get()));
- engine_session_.reset(new BlimpEngineSession(std::move(browser_context)));
+ engine_session_.reset(
+ new BlimpEngineSession(std::move(browser_context), net_log_.get()));
engine_session_->Initialize();
// TODO(haibinlu): Create EngineConnectionManager to accept new connections.
diff --git a/blimp/engine/browser/blimp_engine_session.cc b/blimp/engine/browser/blimp_engine_session.cc
index 3794db0..0dd5870 100644
--- a/blimp/engine/browser/blimp_engine_session.cc
+++ b/blimp/engine/browser/blimp_engine_session.cc
@@ -15,8 +15,13 @@
#include "blimp/engine/ui/blimp_ui_context_factory.h"
#include "blimp/net/blimp_connection.h"
#include "blimp/net/blimp_message_multiplexer.h"
+#include "blimp/net/browser_connection_handler.h"
+#include "blimp/net/engine_authentication_handler.h"
+#include "blimp/net/engine_connection_manager.h"
#include "blimp/net/null_blimp_message_processor.h"
+#include "blimp/net/tcp_engine_transport.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_view_host.h"
@@ -44,6 +49,7 @@ const int kDummyTabId = 0;
const float kDefaultScaleFactor = 1.f;
const int kDefaultDisplayWidth = 800;
const int kDefaultDisplayHeight = 600;
+const uint16 kDefaultPortNumber = 25467;
base::LazyInstance<blimp::NullBlimpMessageProcessor> g_blimp_message_processor =
LAZY_INSTANCE_INITIALIZER;
@@ -64,13 +70,62 @@ class FocusRulesImpl : public wm::BaseFocusRules {
} // namespace
+// This class's functions and destruction are all invoked on the IO thread by
+// the BlimpEngineSession.
+class BlimpNetworkComponents {
+ public:
+ explicit BlimpNetworkComponents(net::NetLog* net_log);
+ ~BlimpNetworkComponents();
+
+ void Initialize();
+
+ private:
+ net::NetLog* net_log_;
+ scoped_ptr<BrowserConnectionHandler> connection_handler_;
+ scoped_ptr<EngineAuthenticationHandler> authentication_handler_;
+ scoped_ptr<EngineConnectionManager> connection_manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(BlimpNetworkComponents);
+};
+
+BlimpNetworkComponents::BlimpNetworkComponents(net::NetLog* net_log)
+ : net_log_(net_log) {}
+
+BlimpNetworkComponents::~BlimpNetworkComponents() {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+}
+
+void BlimpNetworkComponents::Initialize() {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ DCHECK(!connection_handler_);
+
+ // Creates and connects net components.
+ // A BlimpConnection flows from
+ // connection_manager_ --> authentication_handler_ --> connection_handler_
+ connection_handler_.reset(new BrowserConnectionHandler);
+ authentication_handler_.reset(
+ new EngineAuthenticationHandler(connection_handler_.get()));
+ connection_manager_.reset(
+ new EngineConnectionManager(authentication_handler_.get()));
+
+ // Adds BlimpTransports to connection_manager_.
+ net::IPAddressNumber local_ip_any;
+ bool success = net::ParseIPLiteralToNumber("0.0.0.0", &local_ip_any);
+ DCHECK(success);
+ net::IPEndPoint address(local_ip_any, kDefaultPortNumber);
+ connection_manager_->AddTransport(
+ make_scoped_ptr(new TCPEngineTransport(address, net_log_)));
+}
+
BlimpEngineSession::BlimpEngineSession(
- scoped_ptr<BlimpBrowserContext> browser_context)
+ scoped_ptr<BlimpBrowserContext> browser_context,
+ net::NetLog* net_log)
: browser_context_(std::move(browser_context)),
screen_(new BlimpScreen),
// TODO(dtrainor, haibinlu): Properly pull these from the BlimpMessageMux.
render_widget_processor_(g_blimp_message_processor.Pointer(),
- g_blimp_message_processor.Pointer()) {
+ g_blimp_message_processor.Pointer()),
+ net_components_(new BlimpNetworkComponents(net_log)) {
screen_->UpdateDisplayScaleAndSize(kDefaultScaleFactor,
gfx::Size(kDefaultDisplayWidth,
kDefaultDisplayHeight));
@@ -79,6 +134,10 @@ BlimpEngineSession::BlimpEngineSession(
BlimpEngineSession::~BlimpEngineSession() {
render_widget_processor_.RemoveDelegate(kDummyTabId);
+
+ // Safely delete network components on the IO thread.
+ content::BrowserThread::DeleteSoon(content::BrowserThread::IO, FROM_HERE,
+ net_components_.release());
}
void BlimpEngineSession::Initialize() {
@@ -110,6 +169,11 @@ void BlimpEngineSession::Initialize() {
#endif
window_tree_host_->SetBounds(gfx::Rect(screen_->GetPrimaryDisplay().size()));
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&BlimpNetworkComponents::Initialize,
+ base::Unretained(net_components_.get())));
}
void BlimpEngineSession::CreateWebContents(const int target_tab_id) {
diff --git a/blimp/engine/browser/blimp_engine_session.h b/blimp/engine/browser/blimp_engine_session.h
index 3d8e695..d327d77 100644
--- a/blimp/engine/browser/blimp_engine_session.h
+++ b/blimp/engine/browser/blimp_engine_session.h
@@ -34,6 +34,10 @@ namespace gfx {
class Size;
}
+namespace net {
+class NetLog;
+}
+
namespace wm {
class FocusController;
}
@@ -47,6 +51,7 @@ namespace engine {
class BlimpBrowserContext;
class BlimpFocusClient;
+class BlimpNetworkComponents;
class BlimpScreen;
class BlimpUiContextFactory;
class BlimpWindowTreeHost;
@@ -57,9 +62,13 @@ class BlimpEngineSession
public content::WebContentsObserver,
public EngineRenderWidgetMessageProcessor::RenderWidgetMessageDelegate {
public:
- explicit BlimpEngineSession(scoped_ptr<BlimpBrowserContext> browser_context);
+ explicit BlimpEngineSession(scoped_ptr<BlimpBrowserContext> browser_context,
+ net::NetLog* net_log);
~BlimpEngineSession() override;
+ // Starts the network stack on the IO thread, and sets default placeholder
+ // values for e.g. screen size pending real values being supplied by the
+ // client.
void Initialize();
BlimpBrowserContext* browser_context() { return browser_context_.get(); }
@@ -116,6 +125,7 @@ class BlimpEngineSession
void PlatformSetContents(scoped_ptr<content::WebContents> new_contents);
scoped_ptr<BlimpBrowserContext> browser_context_;
+
scoped_ptr<BlimpScreen> screen_;
// Context factory for compositor.
@@ -135,14 +145,16 @@ class BlimpEngineSession
// Only one web_contents is supported for blimp 0.5
scoped_ptr<content::WebContents> web_contents_;
- // Currently attached client connection.
- scoped_ptr<BlimpConnection> client_connection_;
-
// The bridge to the network layer that does the RenderWidget proto/id work.
// TODO(dtrainor, haibinlu): Move this to a higher level once we start dealing
// with multiple tabs.
EngineRenderWidgetMessageProcessor render_widget_processor_;
+ // Container for connection manager, authentication handler, and
+ // browser connection handler. The components run on the I/O thread, and
+ // this object is destroyed there.
+ scoped_ptr<BlimpNetworkComponents> net_components_;
+
DISALLOW_COPY_AND_ASSIGN(BlimpEngineSession);
};