Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Unified Diff: blimp/engine/session/blimp_engine_session.cc

Issue 2035543002: [Blimp] Creates engine tab class to handle tab related operations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
index bf1f7cfa2e0f5eae92b9069c4d1c81a2d586bf3d..de90f1b7250a56ff197f291c344c159d7ab0982e 100644
--- a/blimp/engine/session/blimp_engine_session.cc
+++ b/blimp/engine/session/blimp_engine_session.cc
@@ -23,6 +23,7 @@
#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/session/tab_blimp.h"
#include "blimp/net/blimp_connection.h"
#include "blimp/net/blimp_connection_statistics.h"
#include "blimp/net/blimp_message_multiplexer.h"
@@ -215,8 +216,8 @@ BlimpEngineSession::BlimpEngineSession(
browser_context_(std::move(browser_context)),
engine_config_(engine_config),
settings_manager_(settings_manager),
- settings_feature_(settings_manager_),
- render_widget_feature_(settings_manager_),
+ settings_feature_(new EngineSettingsFeature(settings_manager_)),
+ render_widget_feature_(new EngineRenderWidgetFeature(settings_manager_)),
net_components_(
new EngineNetworkComponents(net_log,
QuitCurrentMessageLoopClosure())) {
@@ -225,19 +226,17 @@ BlimpEngineSession::BlimpEngineSession(
screen_->UpdateDisplayScaleAndSize(kDefaultScaleFactor,
gfx::Size(kDefaultDisplayWidth,
kDefaultDisplayHeight));
- render_widget_feature_.SetDelegate(kDummyTabId, this);
+ render_widget_feature_->SetDelegate(kDummyTabId, this);
}
BlimpEngineSession::~BlimpEngineSession() {
- render_widget_feature_.RemoveDelegate(kDummyTabId);
+ render_widget_feature_->RemoveDelegate(kDummyTabId);
window_tree_host_->GetInputMethod()->RemoveObserver(this);
- page_load_tracker_.reset();
-
// Ensure that all WebContents are torn down first, since teardown will
Kevin M 2016/06/02 18:38:50 Revise this comment?
haibinlu 2016/06/02 20:24:36 Done.
// trigger RenderViewDeleted callbacks to their observers.
- web_contents_.reset();
+ tab_.reset();
// Safely delete network components on the IO thread.
content::BrowserThread::DeleteSoon(content::BrowserThread::IO, FROM_HERE,
@@ -300,29 +299,29 @@ void BlimpEngineSession::RegisterFeatures() {
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(
+ render_widget_feature_->set_render_widget_message_sender(
thread_pipe_manager_->RegisterFeature(BlimpMessage::kRenderWidget,
- &render_widget_feature_));
- render_widget_feature_.set_input_message_sender(
+ render_widget_feature_.get()));
+ render_widget_feature_->set_input_message_sender(
thread_pipe_manager_->RegisterFeature(BlimpMessage::kInput,
- &render_widget_feature_));
- render_widget_feature_.set_compositor_message_sender(
+ render_widget_feature_.get()));
+ render_widget_feature_->set_compositor_message_sender(
thread_pipe_manager_->RegisterFeature(BlimpMessage::kCompositor,
- &render_widget_feature_));
- render_widget_feature_.set_ime_message_sender(
+ render_widget_feature_.get()));
+ render_widget_feature_->set_ime_message_sender(
thread_pipe_manager_->RegisterFeature(BlimpMessage::kIme,
- &render_widget_feature_));
+ render_widget_feature_.get()));
// 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_);
+ settings_feature_.get());
}
bool BlimpEngineSession::CreateWebContents(const int target_tab_id) {
Kevin M 2016/06/02 18:38:50 Why is this called CreateWebContents, when it crea
haibinlu 2016/06/02 20:24:36 Done.
DVLOG(1) << "Create tab " << target_tab_id;
// TODO(haibinlu): Support more than one active WebContents (crbug/547231).
- if (web_contents_) {
+ if (tab_) {
DLOG(WARNING) << "Tab " << target_tab_id << " already existed";
return false;
}
@@ -331,19 +330,15 @@ bool BlimpEngineSession::CreateWebContents(const int target_tab_id) {
nullptr);
std::unique_ptr<content::WebContents> new_contents =
base::WrapUnique(content::WebContents::Create(create_params));
- PlatformSetContents(std::move(new_contents));
-
- // Transfer over the user agent override. The default user agent does not
- // have client IO info.
- web_contents_->SetUserAgentOverride(GetBlimpEngineUserAgent());
+ PlatformSetContents(std::move(new_contents), target_tab_id);
return true;
}
void BlimpEngineSession::CloseWebContents(const int target_tab_id) {
DVLOG(1) << "Close tab " << target_tab_id;
- DCHECK(web_contents_);
- web_contents_->Close();
+ DCHECK(tab_);
+ tab_->Close();
}
void BlimpEngineSession::HandleResize(float device_pixel_ratio,
@@ -351,49 +346,26 @@ void BlimpEngineSession::HandleResize(float device_pixel_ratio,
DVLOG(1) << "Resize to " << size.ToString() << ", " << device_pixel_ratio;
screen_->UpdateDisplayScaleAndSize(device_pixel_ratio, size);
window_tree_host_->SetBounds(gfx::Rect(size));
- if (web_contents_) {
- const gfx::Size size_in_dips = screen_->GetPrimaryDisplay().bounds().size();
- web_contents_->GetNativeView()->SetBounds(gfx::Rect(size_in_dips));
- }
-
- if (web_contents_ && web_contents_->GetRenderViewHost() &&
- web_contents_->GetRenderViewHost()->GetWidget()) {
- web_contents_->GetRenderViewHost()->GetWidget()->WasResized();
+ if (tab_) {
+ tab_->Resize(device_pixel_ratio,
+ screen_->GetPrimaryDisplay().bounds().size());
}
}
void BlimpEngineSession::LoadUrl(const int target_tab_id, const GURL& url) {
- TRACE_EVENT1("blimp", "BlimpEngineSession::LoadUrl", "URL", url.spec());
- DVLOG(1) << "Load URL " << url << " in tab " << target_tab_id;
- if (!url.is_valid()) {
- VLOG(1) << "Dropping invalid URL " << url;
- return;
- }
-
- // TODO(dtrainor, haibinlu): Fix up the URL with url_fixer.h. If that doesn't
- // produce a valid spec() then try to build a search query?
- content::NavigationController::LoadURLParams params(url);
- params.transition_type = ui::PageTransitionFromInt(
- ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
- params.override_user_agent =
- content::NavigationController::UA_OVERRIDE_TRUE;
- web_contents_->GetController().LoadURLWithParams(params);
- web_contents_->Focus();
+ tab_->LoadUrl(url);
Kevin M 2016/06/02 18:38:50 Won't this segfault if tab_ is closed (and nulled)
haibinlu 2016/06/02 20:24:36 added check. we have been depending on client does
}
void BlimpEngineSession::GoBack(const int target_tab_id) {
- DVLOG(1) << "Back in tab " << target_tab_id;
- web_contents_->GetController().GoBack();
+ tab_->GoBack();
}
void BlimpEngineSession::GoForward(const int target_tab_id) {
- DVLOG(1) << "Forward in tab " << target_tab_id;
- web_contents_->GetController().GoForward();
+ tab_->GoForward();
}
void BlimpEngineSession::Reload(const int target_tab_id) {
- DVLOG(1) << "Reload in tab " << target_tab_id;
- web_contents_->GetController().Reload(true);
+ tab_->Reload();
}
void BlimpEngineSession::OnWebGestureEvent(
@@ -427,7 +399,7 @@ void BlimpEngineSession::OnCaretBoundsChanged(
// - the TextInputType of the TextInputClient changes
void BlimpEngineSession::OnTextInputStateChanged(
const ui::TextInputClient* client) {
- if (!web_contents_->GetRenderWidgetHostView())
+ if (!tab_->web_contents()->GetRenderWidgetHostView())
return;
ui::TextInputType type =
@@ -438,9 +410,9 @@ void BlimpEngineSession::OnTextInputStateChanged(
// 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)
- render_widget_feature_.SendHideImeRequest(
+ render_widget_feature_->SendHideImeRequest(
kDummyTabId,
- web_contents_->GetRenderWidgetHostView()->GetRenderWidgetHost());
+ tab_->web_contents()->GetRenderWidgetHostView()->GetRenderWidgetHost());
}
void BlimpEngineSession::OnInputMethodDestroyed(
@@ -449,13 +421,13 @@ void BlimpEngineSession::OnInputMethodDestroyed(
// Called when a user input should trigger showing the IME.
void BlimpEngineSession::OnShowImeIfNeeded() {
TRACE_EVENT0("blimp", "BlimpEngineSession::OnShowImeIfNeeded");
- if (!web_contents_->GetRenderWidgetHostView() ||
+ if (!tab_->web_contents()->GetRenderWidgetHostView() ||
!window_tree_host_->GetInputMethod()->GetTextInputClient())
return;
- render_widget_feature_.SendShowImeRequest(
+ render_widget_feature_->SendShowImeRequest(
kDummyTabId,
- web_contents_->GetRenderWidgetHostView()->GetRenderWidgetHost(),
+ tab_->web_contents()->GetRenderWidgetHostView()->GetRenderWidgetHost(),
window_tree_host_->GetInputMethod()->GetTextInputClient());
}
@@ -486,7 +458,7 @@ void BlimpEngineSession::ProcessMessage(
NOTIMPLEMENTED();
result = net::ERR_NOT_IMPLEMENTED;
}
- } else if (message->has_navigation() && web_contents_) {
+ } else if (message->has_navigation() && tab_) {
switch (message->navigation().type()) {
case NavigationMessage::LOAD_URL:
LoadUrl(message->target_tab_id(),
@@ -555,9 +527,8 @@ void BlimpEngineSession::RequestToLockMouse(content::WebContents* web_contents,
}
void BlimpEngineSession::CloseContents(content::WebContents* source) {
- if (source == web_contents_.get()) {
- Observe(nullptr);
- web_contents_.reset();
+ if (source == tab_->web_contents()) {
+ tab_.reset();
}
}
@@ -569,15 +540,15 @@ void BlimpEngineSession::ForwardCompositorProto(
content::RenderWidgetHost* render_widget_host,
const std::vector<uint8_t>& proto) {
TRACE_EVENT0("blimp", "BlimpEngineSession::ForwardCompositorProto");
- render_widget_feature_.SendCompositorMessage(kDummyTabId, render_widget_host,
- proto);
+ render_widget_feature_->SendCompositorMessage(kDummyTabId, render_widget_host,
+ proto);
}
void BlimpEngineSession::NavigationStateChanged(
content::WebContents* source,
content::InvalidateTypes changed_flags) {
TRACE_EVENT0("blimp", "BlimpEngineSession::NavigationStateChanged");
- if (source != web_contents_.get() || !changed_flags)
+ if (source != tab_->web_contents() || !changed_flags)
return;
NavigationMessage* navigation_message;
@@ -605,63 +576,20 @@ void BlimpEngineSession::NavigationStateChanged(
net::CompletionCallback());
}
-void BlimpEngineSession::RenderViewCreated(
- content::RenderViewHost* render_view_host) {
- render_widget_feature_.OnRenderWidgetCreated(kDummyTabId,
- render_view_host->GetWidget());
-}
-
-void BlimpEngineSession::RenderViewHostChanged(
- content::RenderViewHost* old_host,
- content::RenderViewHost* new_host) {
- // Informs client that WebContents swaps its visible RenderViewHost with
- // another one.
- render_widget_feature_.OnRenderWidgetInitialized(kDummyTabId,
- new_host->GetWidget());
-}
-
-void BlimpEngineSession::RenderViewDeleted(
- content::RenderViewHost* render_view_host) {
- render_widget_feature_.OnRenderWidgetDeleted(kDummyTabId,
- render_view_host->GetWidget());
-}
-
-void BlimpEngineSession::SendPageLoadStatusUpdate(PageLoadStatus load_status) {
- bool page_load_completed = false;
-
- switch (load_status) {
- case PageLoadStatus::LOADING:
- page_load_completed = false;
- break;
- case PageLoadStatus::LOADED:
- page_load_completed = true;
- break;
- }
-
- NavigationMessage* navigation_message = nullptr;
- std::unique_ptr<BlimpMessage> message =
- CreateBlimpMessage(&navigation_message, kDummyTabId);
- navigation_message->set_type(NavigationMessage::NAVIGATION_STATE_CHANGED);
- NavigationStateChangeMessage* details =
- navigation_message->mutable_navigation_state_changed();
- details->set_page_load_completed(page_load_completed);
-
- navigation_message_sender_->ProcessMessage(std::move(message),
- net::CompletionCallback());
-}
-
void BlimpEngineSession::PlatformSetContents(
Kevin M 2016/06/02 18:38:50 I don't see any other callers of this besides Crea
haibinlu 2016/06/02 20:24:37 AddNewContents will use it. But we have not implem
- std::unique_ptr<content::WebContents> new_contents) {
+ std::unique_ptr<content::WebContents> new_contents,
+ const int target_tab_id) {
new_contents->SetDelegate(this);
- Observe(new_contents.get());
- web_contents_ = std::move(new_contents);
- page_load_tracker_.reset(new PageLoadTracker(web_contents_.get(), this));
aura::Window* parent = window_tree_host_->window();
- aura::Window* content = web_contents_->GetNativeView();
+ aura::Window* content = new_contents->GetNativeView();
if (!parent->Contains(content))
Kevin M 2016/06/02 18:38:50 The WebContents and its view are brand new, is it
haibinlu 2016/06/02 20:24:36 that is the view hierarchy. WindowTreeHost is the
parent->AddChild(content);
content->Show();
+
+ tab_ = base::WrapUnique(new TabBlimp(std::move(new_contents), target_tab_id,
+ render_widget_feature_.get(),
+ navigation_message_sender_.get()));
}
} // namespace engine

Powered by Google App Engine
This is Rietveld 408576698