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

Unified Diff: content/browser/web_contents/web_contents_view_aura.cc

Issue 153913004: gesture-nav: Use a WebContentsObserver to more reliably dismiss the navigation overlay. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 10 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
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/web_contents_view_aura.cc
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index f06f827530d3a16e8adbb700dee53e43981ce3c1..ad5623ccabd9d8da8000d00356203c541e43a318 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -492,38 +492,27 @@ class ImageLayerDelegate : public ui::LayerDelegate {
// done navigating and painting. This class accomplishes this by showing the
// screenshot window on top of the page until the page has completed loading and
// painting.
-class OverscrollNavigationOverlay :
- public RenderWidgetHostViewAura::PaintObserver,
- public WindowSlider::Delegate {
+class OverscrollNavigationOverlay : public WebContentsObserver,
+ public WindowSlider::Delegate {
public:
explicit OverscrollNavigationOverlay(WebContentsImpl* web_contents)
: web_contents_(web_contents),
image_delegate_(NULL),
- view_(NULL),
loading_complete_(false),
received_paint_update_(false),
- compositor_updated_(false),
slide_direction_(SLIDE_UNKNOWN),
need_paint_update_(true) {
}
virtual ~OverscrollNavigationOverlay() {
- if (view_)
- view_->set_paint_observer(NULL);
}
bool has_window() const { return !!window_.get(); }
- void StartObservingView(RenderWidgetHostViewAura* view) {
- if (view_)
- view_->set_paint_observer(NULL);
-
+ void StartObserving() {
loading_complete_ = false;
received_paint_update_ = false;
- compositor_updated_ = false;
- view_ = view;
- if (view_)
- view_->set_paint_observer(this);
+ Observe(web_contents_);
// Make sure the overlay window is on top.
if (window_.get() && window_->parent())
@@ -569,13 +558,10 @@ class OverscrollNavigationOverlay :
if (window_slider_.get() && window_slider_->IsSlideInProgress())
return;
+ Observe(NULL);
window_slider_.reset();
window_.reset();
image_delegate_ = NULL;
- if (view_) {
- view_->set_paint_observer(NULL);
- view_ = NULL;
- }
}
// Creates a layer to be used for window-slide. |offset| is the offset of the
@@ -632,8 +618,7 @@ class OverscrollNavigationOverlay :
// Reset state and wait for the new navigation page to complete
// loading/painting.
- StartObservingView(ToRenderWidgetHostViewAura(
- web_contents_->GetRenderWidgetHostView()));
+ StartObserving();
// Perform the navigation.
if (direction == SLIDE_BACK)
@@ -654,32 +639,17 @@ class OverscrollNavigationOverlay :
StopObservingIfDone();
}
- // Overridden from RenderWidgetHostViewAura::PaintObserver:
- virtual void OnPaintComplete() OVERRIDE {
+ // Overridden from WebContentsObserver:
+ virtual void DidFirstVisuallyNonEmptyPaint(int32 page_id) OVERRIDE {
received_paint_update_ = true;
StopObservingIfDone();
}
- virtual void OnCompositingComplete() OVERRIDE {
- received_paint_update_ = compositor_updated_;
- StopObservingIfDone();
- }
-
- virtual void OnUpdateCompositorContent() OVERRIDE {
- compositor_updated_ = true;
- }
-
- virtual void OnPageLoadComplete() OVERRIDE {
+ virtual void DidStopLoading(RenderViewHost* host) OVERRIDE {
loading_complete_ = true;
StopObservingIfDone();
}
- virtual void OnViewDestroyed() OVERRIDE {
- DCHECK(view_);
- view_->set_paint_observer(NULL);
- view_ = NULL;
- }
-
// The WebContents which is being navigated.
WebContentsImpl* web_contents_;
@@ -689,10 +659,8 @@ class OverscrollNavigationOverlay :
// lifetime (destroys itself when |window_| is destroyed).
ImageWindowDelegate* image_delegate_;
- RenderWidgetHostViewAura* view_;
bool loading_complete_;
bool received_paint_update_;
- bool compositor_updated_;
enum SlideDirection {
SLIDE_UNKNOWN,
@@ -1161,8 +1129,7 @@ void WebContentsViewAura::PrepareOverscrollNavigationOverlay() {
overscroll_window_->SetTransform(gfx::Transform());
navigation_overlay_->SetOverlayWindow(overscroll_window_.Pass(),
delegate);
- navigation_overlay_->StartObservingView(ToRenderWidgetHostViewAura(
- web_contents_->GetRenderWidgetHostView()));
+ navigation_overlay_->StartObserving();
}
void WebContentsViewAura::UpdateOverscrollWindowBrightness(float delta_x) {
@@ -1339,7 +1306,7 @@ RenderWidgetHostView* WebContentsViewAura::CreateViewForWidget(
GetNativeView()->AddChild(view->GetNativeView());
if (navigation_overlay_.get() && navigation_overlay_->has_window()) {
- navigation_overlay_->StartObservingView(ToRenderWidgetHostViewAura(view));
+ navigation_overlay_->StartObserving();
}
RenderWidgetHostImpl* host_impl =
@@ -1376,10 +1343,8 @@ void WebContentsViewAura::RenderViewCreated(RenderViewHost* host) {
}
void WebContentsViewAura::RenderViewSwappedIn(RenderViewHost* host) {
- if (navigation_overlay_.get() && navigation_overlay_->has_window()) {
- navigation_overlay_->StartObservingView(
- ToRenderWidgetHostViewAura(host->GetView()));
- }
+ if (navigation_overlay_.get() && navigation_overlay_->has_window())
+ navigation_overlay_->StartObserving();
AttachTouchEditableToRenderView();
}
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698