| Index: blimp/engine/session/blimp_engine_session.cc
|
| diff --git a/blimp/engine/session/blimp_engine_session.cc b/blimp/engine/session/blimp_engine_session.cc
|
| deleted file mode 100644
|
| index 3d19e99b136df4fa706437bddfa7671095156e5e..0000000000000000000000000000000000000000
|
| --- a/blimp/engine/session/blimp_engine_session.cc
|
| +++ /dev/null
|
| @@ -1,590 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "blimp/engine/session/blimp_engine_session.h"
|
| -
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "base/trace_event/trace_event.h"
|
| -#include "blimp/common/blob_cache/in_memory_blob_cache.h"
|
| -#include "blimp/common/create_blimp_message.h"
|
| -#include "blimp/common/proto/tab_control.pb.h"
|
| -#include "blimp/engine/app/blimp_engine_config.h"
|
| -#include "blimp/engine/app/settings_manager.h"
|
| -#include "blimp/engine/app/switches.h"
|
| -#include "blimp/engine/app/ui/blimp_layout_manager.h"
|
| -#include "blimp/engine/app/ui/blimp_screen.h"
|
| -#include "blimp/engine/app/ui/blimp_window_parenting_client.h"
|
| -#include "blimp/engine/app/ui/blimp_window_tree_host.h"
|
| -#include "blimp/engine/common/blimp_browser_context.h"
|
| -#include "blimp/engine/common/blimp_user_agent.h"
|
| -#include "blimp/engine/mojo/blob_channel_service.h"
|
| -#include "blimp/engine/session/tab.h"
|
| -#include "blimp/net/blimp_connection.h"
|
| -#include "blimp/net/blimp_message_multiplexer.h"
|
| -#include "blimp/net/blimp_message_thread_pipe.h"
|
| -#include "blimp/net/blimp_stats.h"
|
| -#include "blimp/net/blob_channel/blob_channel_sender_impl.h"
|
| -#include "blimp/net/blob_channel/helium_blob_sender_delegate.h"
|
| -#include "blimp/net/browser_connection_handler.h"
|
| -#include "blimp/net/common.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 "blimp/net/thread_pipe_manager.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"
|
| -#include "content/public/browser/render_widget_host.h"
|
| -#include "content/public/browser/render_widget_host_view.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "device/geolocation/geolocation_delegate.h"
|
| -#include "device/geolocation/geolocation_provider.h"
|
| -#include "net/base/ip_address.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "ui/aura/client/default_capture_client.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_tree_host.h"
|
| -#include "ui/base/ime/input_method.h"
|
| -#include "ui/base/ime/text_input_client.h"
|
| -#include "ui/gfx/geometry/size.h"
|
| -#include "ui/wm/core/base_focus_rules.h"
|
| -#include "ui/wm/core/default_activation_client.h"
|
| -#include "ui/wm/core/focus_controller.h"
|
| -
|
| -namespace blimp {
|
| -namespace engine {
|
| -namespace {
|
| -
|
| -const float kDefaultScaleFactor = 1.f;
|
| -const int kDefaultDisplayWidth = 800;
|
| -const int kDefaultDisplayHeight = 600;
|
| -const uint16_t kDefaultPort = 25467;
|
| -
|
| -const char kTcpTransport[] = "tcp";
|
| -const char kGrpcTransport[] = "grpc";
|
| -
|
| -// Focus rules that support activating an child window.
|
| -class FocusRulesImpl : public wm::BaseFocusRules {
|
| - public:
|
| - FocusRulesImpl() {}
|
| - ~FocusRulesImpl() override {}
|
| -
|
| - bool SupportsChildActivation(aura::Window* window) const override {
|
| - return true;
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(FocusRulesImpl);
|
| -};
|
| -
|
| -// Proxies calls to TaskRunner::PostTask while stripping the return value,
|
| -// which provides a suitable function prototype for binding a base::Closure.
|
| -void PostTask(const scoped_refptr<base::TaskRunner>& task_runner,
|
| - const base::Closure& closure) {
|
| - task_runner->PostTask(FROM_HERE, closure);
|
| -}
|
| -
|
| -// Returns a closure that quits the current (bind-time) MessageLoop.
|
| -base::Closure QuitCurrentMessageLoopClosure() {
|
| - return base::Bind(&PostTask, base::ThreadTaskRunnerHandle::Get(),
|
| - base::MessageLoop::QuitWhenIdleClosure());
|
| -}
|
| -
|
| -EngineConnectionManager::EngineTransportType GetTransportType() {
|
| - const std::string transport_parsed =
|
| - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| - kEngineTransport);
|
| - if (transport_parsed == kTcpTransport || transport_parsed.empty()) {
|
| - return EngineConnectionManager::EngineTransportType::TCP;
|
| - } else if (transport_parsed == kGrpcTransport) {
|
| - return EngineConnectionManager::EngineTransportType::GRPC;
|
| - }
|
| - LOG(FATAL) << "--engine-transport must either be empty or one of "
|
| - << kGrpcTransport << ", " << kTcpTransport;
|
| - return EngineConnectionManager::EngineTransportType::TCP;
|
| -}
|
| -
|
| -net::IPAddress GetListeningAddress() {
|
| - if (base::CommandLine::ForCurrentProcess()->HasSwitch(kAllowNonLocalhost)) {
|
| - return net::IPAddress::IPv4AllZeros();
|
| - }
|
| - return net::IPAddress::IPv4Localhost();
|
| -}
|
| -
|
| -uint16_t GetListeningPort() {
|
| - unsigned port_parsed = 0;
|
| - if (!base::StringToUint(
|
| - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| - kEnginePort),
|
| - &port_parsed)) {
|
| - return kDefaultPort;
|
| - }
|
| - if (port_parsed > 65535) {
|
| - LOG(FATAL) << "--engine-port must be a value between 0 and 65535.";
|
| - return kDefaultPort;
|
| - }
|
| - return port_parsed;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// EngineNetworkComponents is created by the BlimpEngineSession on the UI
|
| -// thread, and then used and destroyed on the IO thread.
|
| -class EngineNetworkComponents : public ConnectionHandler,
|
| - public ConnectionErrorObserver {
|
| - public:
|
| - // |net_log|: The log to use for network-related events.
|
| - explicit EngineNetworkComponents(net::NetLog* net_log);
|
| - ~EngineNetworkComponents() override;
|
| -
|
| - // Sets up network components and starts listening for incoming connection.
|
| - // This should be called after all features have been registered so that
|
| - // received messages can be properly handled.
|
| - void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
|
| - base::WeakPtr<BlobChannelSender> blob_channel_sender,
|
| - const std::string& client_token);
|
| -
|
| - // TODO(perumaal): Remove this once gRPC support is ready.
|
| - // See crbug.com/659279.
|
| - uint16_t GetPortForTesting() { return port_; }
|
| -
|
| - BrowserConnectionHandler* connection_handler() {
|
| - return &connection_handler_;
|
| - }
|
| -
|
| - BlobChannelService* blob_channel_service() {
|
| - return blob_channel_service_.get();
|
| - }
|
| -
|
| - private:
|
| - // ConnectionHandler implementation.
|
| - void HandleConnection(std::unique_ptr<BlimpConnection> connection) override;
|
| -
|
| - // ConnectionErrorObserver implementation.
|
| - // Signals the engine session that an authenticated connection was
|
| - // terminated.
|
| - void OnConnectionError(int error) override;
|
| -
|
| - net::NetLog* net_log_;
|
| - uint16_t port_ = 0;
|
| -
|
| - BrowserConnectionHandler connection_handler_;
|
| - std::unique_ptr<EngineAuthenticationHandler> authentication_handler_;
|
| - std::unique_ptr<EngineConnectionManager> connection_manager_;
|
| - std::unique_ptr<BlobChannelService> blob_channel_service_;
|
| - base::Closure quit_closure_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents);
|
| -};
|
| -
|
| -EngineNetworkComponents::EngineNetworkComponents(net::NetLog* net_log)
|
| - : net_log_(net_log), quit_closure_(QuitCurrentMessageLoopClosure()) {}
|
| -
|
| -EngineNetworkComponents::~EngineNetworkComponents() {
|
| - DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| -}
|
| -
|
| -void EngineNetworkComponents::Initialize(
|
| - scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
|
| - base::WeakPtr<BlobChannelSender> blob_channel_sender,
|
| - const std::string& client_token) {
|
| - DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| - DCHECK(!connection_manager_);
|
| - // Plumb authenticated connections from the authentication handler
|
| - // to |this| (which will then pass it to |connection_handler_|.
|
| - authentication_handler_ =
|
| - base::MakeUnique<EngineAuthenticationHandler>(this, client_token);
|
| -
|
| - // Plumb unauthenticated connections to |authentication_handler_|.
|
| - connection_manager_ = base::MakeUnique<EngineConnectionManager>(
|
| - authentication_handler_.get(), net_log_);
|
| -
|
| - blob_channel_service_ =
|
| - base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner);
|
| -
|
| - // Adds BlimpTransports to connection_manager_.
|
| - net::IPEndPoint address(GetListeningAddress(), GetListeningPort());
|
| - connection_manager_->ConnectTransport(&address, GetTransportType());
|
| - port_ = address.port();
|
| -
|
| - // Print the engine port for client_engine_integration script, please do not
|
| - // remove this log.
|
| - DVLOG(1) << "Engine port #: " << port_;
|
| -}
|
| -
|
| -void EngineNetworkComponents::HandleConnection(
|
| - std::unique_ptr<BlimpConnection> connection) {
|
| - // Observe |connection| for disconnection events.
|
| - connection->AddConnectionErrorObserver(this);
|
| - connection_handler_.HandleConnection(std::move(connection));
|
| -}
|
| -
|
| -void EngineNetworkComponents::OnConnectionError(int error) {
|
| - DVLOG(1) << "EngineNetworkComponents::OnConnectionError(" << error << ")";
|
| - quit_closure_.Run();
|
| -}
|
| -
|
| -BlimpEngineSession::BlimpEngineSession(
|
| - std::unique_ptr<BlimpBrowserContext> browser_context,
|
| - net::NetLog* net_log,
|
| - BlimpEngineConfig* engine_config,
|
| - SettingsManager* settings_manager)
|
| - : screen_(new BlimpScreen),
|
| - browser_context_(std::move(browser_context)),
|
| - engine_config_(engine_config),
|
| - settings_manager_(settings_manager),
|
| - settings_feature_(settings_manager_),
|
| - render_widget_feature_(settings_manager_),
|
| - net_components_(new EngineNetworkComponents(net_log)) {
|
| - DCHECK(engine_config_);
|
| - DCHECK(settings_manager_);
|
| -
|
| - screen_->UpdateDisplayScaleAndSize(
|
| - kDefaultScaleFactor,
|
| - gfx::Size(kDefaultDisplayWidth, kDefaultDisplayHeight));
|
| -
|
| - std::unique_ptr<HeliumBlobSenderDelegate> helium_blob_delegate(
|
| - new HeliumBlobSenderDelegate);
|
| - blob_delegate_ = helium_blob_delegate.get();
|
| - blob_channel_sender_ = base::MakeUnique<BlobChannelSenderImpl>(
|
| - base::MakeUnique<InMemoryBlobCache>(), std::move(helium_blob_delegate));
|
| - blob_channel_sender_weak_factory_ =
|
| - base::MakeUnique<base::WeakPtrFactory<BlobChannelSenderImpl>>(
|
| - blob_channel_sender_.get());
|
| -
|
| - device::GeolocationProvider::SetGeolocationDelegate(
|
| - geolocation_feature_.CreateGeolocationDelegate());
|
| -}
|
| -
|
| -BlimpEngineSession::~BlimpEngineSession() {
|
| - window_tree_host_->GetInputMethod()->RemoveObserver(this);
|
| -
|
| - // Ensure that all tabs are torn down first, since teardown will
|
| - // trigger RenderViewDeleted callbacks to their observers, which will in turn
|
| - // send messages to net_components_, which is already deleted due to the line
|
| - // below.
|
| - tab_.reset();
|
| -
|
| - // Safely delete network components on the IO thread.
|
| - content::BrowserThread::DeleteSoon(content::BrowserThread::IO, FROM_HERE,
|
| - net_components_.release());
|
| -}
|
| -
|
| -void BlimpEngineSession::Initialize() {
|
| - DCHECK(!display::Screen::GetScreen());
|
| - display::Screen::SetScreenInstance(screen_.get());
|
| -
|
| - window_tree_host_.reset(new BlimpWindowTreeHost());
|
| -
|
| - screen_->set_window_tree_host(window_tree_host_.get());
|
| - window_tree_host_->InitHost();
|
| - window_tree_host_->window()->Show();
|
| - window_tree_host_->window()->SetLayoutManager(
|
| - new BlimpLayoutManager(window_tree_host_->window()));
|
| - focus_client_.reset(new wm::FocusController(new FocusRulesImpl));
|
| - aura::client::SetFocusClient(window_tree_host_->window(),
|
| - focus_client_.get());
|
| - aura::client::SetActivationClient(window_tree_host_->window(),
|
| - focus_client_.get());
|
| - capture_client_.reset(
|
| - new aura::client::DefaultCaptureClient(window_tree_host_->window()));
|
| -
|
| - window_parenting_client_.reset(
|
| - new BlimpWindowParentingClient(window_tree_host_->window()));
|
| -
|
| - window_tree_host_->GetInputMethod()->AddObserver(this);
|
| -
|
| - window_tree_host_->SetBoundsInPixels(
|
| - gfx::Rect(screen_->GetPrimaryDisplay().size()));
|
| -
|
| - RegisterFeatures();
|
| -
|
| - // Initialize must only be posted after the RegisterFeature calls have
|
| - // completed.
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&EngineNetworkComponents::Initialize,
|
| - base::Unretained(net_components_.get()),
|
| - base::ThreadTaskRunnerHandle::Get(),
|
| - blob_channel_sender_weak_factory_->GetWeakPtr(),
|
| - engine_config_->client_auth_token()));
|
| -}
|
| -
|
| -BlobChannelService* BlimpEngineSession::GetBlobChannelService() {
|
| - return net_components_->blob_channel_service();
|
| -}
|
| -
|
| -void BlimpEngineSession::GetEnginePortForTesting(
|
| - const GetPortCallback& callback) {
|
| - content::BrowserThread::PostTaskAndReplyWithResult(
|
| - content::BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&EngineNetworkComponents::GetPortForTesting,
|
| - base::Unretained(net_components_.get())),
|
| - callback);
|
| -}
|
| -
|
| -void BlimpEngineSession::RegisterFeatures() {
|
| - thread_pipe_manager_.reset(
|
| - new ThreadPipeManager(content::BrowserThread::GetTaskRunnerForThread(
|
| - content::BrowserThread::IO),
|
| - net_components_->connection_handler()));
|
| -
|
| - // Register features' message senders and receivers.
|
| - tab_control_message_sender_ =
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kTabControl, this);
|
| - navigation_message_sender_ =
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kNavigation, this);
|
| - render_widget_feature_.set_render_widget_message_sender(
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kRenderWidget,
|
| - &render_widget_feature_));
|
| - render_widget_feature_.set_input_message_sender(
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kInput,
|
| - &render_widget_feature_));
|
| - render_widget_feature_.set_compositor_message_sender(
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kCompositor,
|
| - &render_widget_feature_));
|
| - render_widget_feature_.set_ime_message_sender(
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kIme,
|
| - &render_widget_feature_));
|
| - geolocation_feature_.set_outgoing_message_processor(
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kGeolocation,
|
| - &geolocation_feature_));
|
| - blob_delegate_->set_outgoing_message_processor(
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kBlobChannel,
|
| - blob_delegate_));
|
| -
|
| - // The Settings feature does not need an outgoing message processor, since we
|
| - // don't send any messages to the client right now.
|
| - thread_pipe_manager_->RegisterFeature(BlimpMessage::kSettings,
|
| - &settings_feature_);
|
| -}
|
| -
|
| -bool BlimpEngineSession::CreateTab(const int target_tab_id) {
|
| - DVLOG(1) << "Create tab " << target_tab_id;
|
| - if (tab_) {
|
| - return false;
|
| - }
|
| -
|
| - content::WebContents::CreateParams create_params(browser_context_.get(),
|
| - nullptr);
|
| - std::unique_ptr<content::WebContents> new_contents =
|
| - base::WrapUnique(content::WebContents::Create(create_params));
|
| - PlatformSetContents(std::move(new_contents), target_tab_id);
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void BlimpEngineSession::CloseTab(const int target_tab_id) {
|
| - DVLOG(1) << "Close tab " << target_tab_id;
|
| - tab_.reset();
|
| -}
|
| -
|
| -void BlimpEngineSession::HandleResize(float device_pixel_ratio,
|
| - const gfx::Size& size) {
|
| - DVLOG(1) << "Resize to " << size.ToString() << ", " << device_pixel_ratio;
|
| - screen_->UpdateDisplayScaleAndSize(device_pixel_ratio, size);
|
| - window_tree_host_->SetBoundsInPixels(gfx::Rect(size));
|
| - if (tab_) {
|
| - tab_->Resize(device_pixel_ratio,
|
| - screen_->GetPrimaryDisplay().bounds().size());
|
| - }
|
| -}
|
| -
|
| -void BlimpEngineSession::OnTextInputTypeChanged(
|
| - const ui::TextInputClient* client) {}
|
| -
|
| -void BlimpEngineSession::OnFocus() {}
|
| -
|
| -void BlimpEngineSession::OnBlur() {}
|
| -
|
| -void BlimpEngineSession::OnCaretBoundsChanged(
|
| - const ui::TextInputClient* client) {}
|
| -
|
| -// Called when either:
|
| -// - the TextInputClient is changed (e.g. by a change of focus)
|
| -// - the TextInputType of the TextInputClient changes
|
| -void BlimpEngineSession::OnTextInputStateChanged(
|
| - const ui::TextInputClient* client) {
|
| - if (!tab_ || !tab_->web_contents()->GetRenderWidgetHostView())
|
| - return;
|
| -
|
| - ui::TextInputType type =
|
| - client ? client->GetTextInputType() : ui::TEXT_INPUT_TYPE_NONE;
|
| -
|
| - // Hide IME, when text input is out of focus, i.e. if the text input type
|
| - // changes to ui::TEXT_INPUT_TYPE_NONE. For other text input types,
|
| - // OnShowImeIfNeeded is used instead to send show IME request to client.
|
| - if (type == ui::TEXT_INPUT_TYPE_NONE)
|
| - tab_->HideTextInputUI();
|
| -}
|
| -
|
| -void BlimpEngineSession::OnInputMethodDestroyed(
|
| - const ui::InputMethod* input_method) {}
|
| -
|
| -// Called when a user input should trigger showing the IME.
|
| -void BlimpEngineSession::OnShowImeIfNeeded() {
|
| - TRACE_EVENT0("blimp", "BlimpEngineSession::OnShowImeIfNeeded");
|
| - if (!tab_ || !tab_->web_contents()->GetRenderWidgetHostView() ||
|
| - !window_tree_host_->GetInputMethod()->GetTextInputClient())
|
| - return;
|
| -
|
| - tab_->ShowTextInputUI();
|
| -}
|
| -
|
| -void BlimpEngineSession::ProcessMessage(
|
| - std::unique_ptr<BlimpMessage> message,
|
| - const net::CompletionCallback& callback) {
|
| - TRACE_EVENT1("blimp", "BlimpEngineSession::ProcessMessage", "TabId",
|
| - message->target_tab_id());
|
| - DCHECK(!callback.is_null());
|
| - DCHECK(BlimpMessage::kTabControl == message->feature_case() ||
|
| - BlimpMessage::kNavigation == message->feature_case());
|
| -
|
| - net::Error result = net::OK;
|
| - if (message->has_tab_control()) {
|
| - switch (message->tab_control().tab_control_case()) {
|
| - case TabControlMessage::kCreateTab:
|
| - if (!CreateTab(message->target_tab_id()))
|
| - result = net::ERR_FAILED;
|
| - break;
|
| - case TabControlMessage::kCloseTab:
|
| - CloseTab(message->target_tab_id());
|
| - case TabControlMessage::kSize:
|
| - HandleResize(message->tab_control().size().device_pixel_ratio(),
|
| - gfx::Size(message->tab_control().size().width(),
|
| - message->tab_control().size().height()));
|
| - break;
|
| - default:
|
| - NOTIMPLEMENTED();
|
| - result = net::ERR_NOT_IMPLEMENTED;
|
| - }
|
| - } else if (message->has_navigation()) {
|
| - if (tab_) {
|
| - switch (message->navigation().type()) {
|
| - case NavigationMessage::LOAD_URL:
|
| - tab_->LoadUrl(GURL(message->navigation().load_url().url()));
|
| - break;
|
| - case NavigationMessage::GO_BACK:
|
| - tab_->GoBack();
|
| - break;
|
| - case NavigationMessage::GO_FORWARD:
|
| - tab_->GoForward();
|
| - break;
|
| - case NavigationMessage::RELOAD:
|
| - tab_->Reload();
|
| - break;
|
| - default:
|
| - NOTIMPLEMENTED();
|
| - result = net::ERR_NOT_IMPLEMENTED;
|
| - }
|
| - } else {
|
| - VLOG(1) << "Tab " << message->target_tab_id() << " does not exist";
|
| - }
|
| - } else {
|
| - NOTREACHED();
|
| - result = net::ERR_FAILED;
|
| - }
|
| -
|
| - callback.Run(result);
|
| -}
|
| -
|
| -void BlimpEngineSession::AddNewContents(content::WebContents* source,
|
| - content::WebContents* new_contents,
|
| - WindowOpenDisposition disposition,
|
| - const gfx::Rect& initial_rect,
|
| - bool user_gesture,
|
| - bool* was_blocked) {
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -content::WebContents* BlimpEngineSession::OpenURLFromTab(
|
| - content::WebContents* source,
|
| - const content::OpenURLParams& params) {
|
| - // CURRENT_TAB is the only one we implement for now.
|
| - if (params.disposition != WindowOpenDisposition::CURRENT_TAB) {
|
| - NOTIMPLEMENTED();
|
| - return nullptr;
|
| - }
|
| -
|
| - // TODO(haibinlu): Add helper method to get LoadURLParams from OpenURLParams.
|
| - content::NavigationController::LoadURLParams load_url_params(params.url);
|
| - load_url_params.source_site_instance = params.source_site_instance;
|
| - load_url_params.referrer = params.referrer;
|
| - load_url_params.frame_tree_node_id = params.frame_tree_node_id;
|
| - load_url_params.transition_type = params.transition;
|
| - load_url_params.extra_headers = params.extra_headers;
|
| - load_url_params.should_replace_current_entry =
|
| - params.should_replace_current_entry;
|
| - load_url_params.is_renderer_initiated = params.is_renderer_initiated;
|
| - load_url_params.override_user_agent =
|
| - content::NavigationController::UA_OVERRIDE_TRUE;
|
| -
|
| - source->GetController().LoadURLWithParams(load_url_params);
|
| - return source;
|
| -}
|
| -
|
| -void BlimpEngineSession::RequestToLockMouse(content::WebContents* web_contents,
|
| - bool user_gesture,
|
| - bool last_unlocked_by_target) {
|
| - web_contents->GotResponseToLockMouseRequest(true);
|
| -}
|
| -
|
| -void BlimpEngineSession::CloseContents(content::WebContents* source) {
|
| - if (source == tab_->web_contents()) {
|
| - tab_.reset();
|
| - }
|
| -}
|
| -
|
| -void BlimpEngineSession::ActivateContents(content::WebContents* contents) {
|
| - contents->GetRenderViewHost()->GetWidget()->Focus();
|
| -}
|
| -
|
| -void BlimpEngineSession::ForwardCompositorProto(
|
| - content::RenderWidgetHost* render_widget_host,
|
| - const std::vector<uint8_t>& proto) {
|
| - TRACE_EVENT0("blimp", "BlimpEngineSession::ForwardCompositorProto");
|
| - if (!tab_) {
|
| - return;
|
| - }
|
| - render_widget_feature_.SendCompositorMessage(tab_->tab_id(),
|
| - render_widget_host, proto);
|
| -}
|
| -
|
| -void BlimpEngineSession::NavigationStateChanged(
|
| - content::WebContents* source,
|
| - content::InvalidateTypes changed_flags) {
|
| - TRACE_EVENT0("blimp", "BlimpEngineSession::NavigationStateChanged");
|
| - if (source == tab_->web_contents())
|
| - tab_->NavigationStateChanged(changed_flags);
|
| -}
|
| -
|
| -void BlimpEngineSession::PlatformSetContents(
|
| - std::unique_ptr<content::WebContents> new_contents,
|
| - const int target_tab_id) {
|
| - new_contents->SetDelegate(this);
|
| -
|
| - aura::Window* parent = window_tree_host_->window();
|
| - aura::Window* content = new_contents->GetNativeView();
|
| - if (!parent->Contains(content))
|
| - parent->AddChild(content);
|
| - content->Show();
|
| -
|
| - tab_ = base::MakeUnique<Tab>(std::move(new_contents), target_tab_id,
|
| - &render_widget_feature_,
|
| - navigation_message_sender_.get());
|
| -}
|
| -
|
| -} // namespace engine
|
| -} // namespace blimp
|
|
|