diff options
author | haibinlu <haibinlu@chromium.org> | 2015-12-17 17:37:38 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-18 01:38:20 +0000 |
commit | 3843192fb540302ab1e488e9d1d34afb789c6e45 (patch) | |
tree | 59e85e33109186dbc6dbc6a11b124af9c661e7b7 /blimp | |
parent | 36dd3c0dd907d5ec59552a43be85cfb43c57c4b6 (diff) | |
download | chromium_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')
-rw-r--r-- | blimp/engine/browser/blimp_browser_main_parts.cc | 3 | ||||
-rw-r--r-- | blimp/engine/browser/blimp_engine_session.cc | 68 | ||||
-rw-r--r-- | blimp/engine/browser/blimp_engine_session.h | 20 |
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); }; |