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

Side by Side Diff: content/browser/web_contents/aura/overscroll_navigation_overlay.cc

Issue 278173005: Removing listening for repaints (OnUpdateRect) from OverscrollNavigationOverlay. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/web_contents/aura/overscroll_navigation_overlay.h" 5 #include "content/browser/web_contents/aura/overscroll_navigation_overlay.h"
6 6
7 #include "content/browser/frame_host/navigation_entry_impl.h" 7 #include "content/browser/frame_host/navigation_entry_impl.h"
8 #include "content/browser/renderer_host/render_view_host_impl.h" 8 #include "content/browser/renderer_host/render_view_host_impl.h"
9 #include "content/browser/web_contents/aura/image_window_delegate.h" 9 #include "content/browser/web_contents/aura/image_window_delegate.h"
10 #include "content/browser/web_contents/web_contents_impl.h" 10 #include "content/browser/web_contents/web_contents_impl.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 scoped_ptr<ui::Layer> layer_; 106 scoped_ptr<ui::Layer> layer_;
107 107
108 DISALLOW_COPY_AND_ASSIGN(OverlayDismissAnimator); 108 DISALLOW_COPY_AND_ASSIGN(OverlayDismissAnimator);
109 }; 109 };
110 110
111 OverscrollNavigationOverlay::OverscrollNavigationOverlay( 111 OverscrollNavigationOverlay::OverscrollNavigationOverlay(
112 WebContentsImpl* web_contents) 112 WebContentsImpl* web_contents)
113 : web_contents_(web_contents), 113 : web_contents_(web_contents),
114 image_delegate_(NULL), 114 image_delegate_(NULL),
115 loading_complete_(false),
116 received_paint_update_(false), 115 received_paint_update_(false),
117 pending_entry_id_(0), 116 pending_entry_id_(0),
118 slide_direction_(SLIDE_UNKNOWN), 117 slide_direction_(SLIDE_UNKNOWN),
119 need_paint_update_(true) { 118 need_paint_update_(true) {
120 } 119 }
121 120
122 OverscrollNavigationOverlay::~OverscrollNavigationOverlay() { 121 OverscrollNavigationOverlay::~OverscrollNavigationOverlay() {
123 } 122 }
124 123
125 void OverscrollNavigationOverlay::StartObserving() { 124 void OverscrollNavigationOverlay::StartObserving() {
126 loading_complete_ = false;
127 received_paint_update_ = false; 125 received_paint_update_ = false;
128 pending_entry_id_ = 0; 126 pending_entry_id_ = 0;
129 Observe(web_contents_); 127 Observe(web_contents_);
130 128
131 // Make sure the overlay window is on top. 129 // Make sure the overlay window is on top.
132 if (window_.get() && window_->parent()) 130 if (window_.get() && window_->parent())
133 window_->parent()->StackChildAtTop(window_.get()); 131 window_->parent()->StackChildAtTop(window_.get());
134 132
135 // Assumes the navigation has been initiated. 133 // Assumes the navigation has been initiated.
136 NavigationEntry* pending_entry = 134 NavigationEntry* pending_entry =
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 } 199 }
202 if (!layer_delegate_) 200 if (!layer_delegate_)
203 layer_delegate_.reset(new ImageLayerDelegate()); 201 layer_delegate_.reset(new ImageLayerDelegate());
204 layer_delegate_->SetImage(image); 202 layer_delegate_->SetImage(image);
205 203
206 ui::Layer* layer = new ui::Layer(ui::LAYER_TEXTURED); 204 ui::Layer* layer = new ui::Layer(ui::LAYER_TEXTURED);
207 layer->set_delegate(layer_delegate_.get()); 205 layer->set_delegate(layer_delegate_.get());
208 return layer; 206 return layer;
209 } 207 }
210 208
211 void OverscrollNavigationOverlay::OnUpdateRect(
212 const ViewHostMsg_UpdateRect_Params& params) {
213 if (loading_complete_ &&
214 ViewHostMsg_UpdateRect_Flags::is_repaint_ack(params.flags)) {
215 NavigationEntry* visible_entry =
216 web_contents_->GetController().GetVisibleEntry();
217 int visible_entry_id = visible_entry ? visible_entry->GetUniqueID() : 0;
218 if (visible_entry_id == pending_entry_id_ || !pending_entry_id_) {
219 // This is a paint update after the page has been loaded. So do not wait
220 // for a 'first non-empty' paint update.
221 received_paint_update_ = true;
222 StopObservingIfDone();
223 }
224 }
225 }
226
227 ui::Layer* OverscrollNavigationOverlay::CreateBackLayer() { 209 ui::Layer* OverscrollNavigationOverlay::CreateBackLayer() {
228 if (!web_contents_->GetController().CanGoBack()) 210 if (!web_contents_->GetController().CanGoBack())
229 return NULL; 211 return NULL;
230 slide_direction_ = SLIDE_BACK; 212 slide_direction_ = SLIDE_BACK;
231 return CreateSlideLayer(-1); 213 return CreateSlideLayer(-1);
232 } 214 }
233 215
234 ui::Layer* OverscrollNavigationOverlay::CreateFrontLayer() { 216 ui::Layer* OverscrollNavigationOverlay::CreateFrontLayer() {
235 if (!web_contents_->GetController().CanGoForward()) 217 if (!web_contents_->GetController().CanGoForward())
236 return NULL; 218 return NULL;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 // we don't need to do anything. 276 // we don't need to do anything.
295 // This check prevents StopObservingIfDone() being called multiple times 277 // This check prevents StopObservingIfDone() being called multiple times
296 // (including recursively) for a single event. 278 // (including recursively) for a single event.
297 if (window_slider_.get()) { 279 if (window_slider_.get()) {
298 // The slider has just been destroyed. Release the ownership. 280 // The slider has just been destroyed. Release the ownership.
299 WindowSlider* slider ALLOW_UNUSED = window_slider_.release(); 281 WindowSlider* slider ALLOW_UNUSED = window_slider_.release();
300 StopObservingIfDone(); 282 StopObservingIfDone();
301 } 283 }
302 } 284 }
303 285
304 void OverscrollNavigationOverlay::DocumentOnLoadCompletedInMainFrame() {
305 // Use the last committed entry rather than the active one, in case a
306 // pending entry has been created.
307 int committed_entry_id =
308 web_contents_->GetController().GetLastCommittedEntry()->GetUniqueID();
309 // Consider the loading completed once the main frame has loaded.
310 if (committed_entry_id == pending_entry_id_ || !pending_entry_id_) {
311 loading_complete_ = true;
312 StopObservingIfDone();
313 }
314 }
315
316 void OverscrollNavigationOverlay::DidFirstVisuallyNonEmptyPaint() { 286 void OverscrollNavigationOverlay::DidFirstVisuallyNonEmptyPaint() {
317 int visible_entry_id = 287 int visible_entry_id =
318 web_contents_->GetController().GetVisibleEntry()->GetUniqueID(); 288 web_contents_->GetController().GetVisibleEntry()->GetUniqueID();
319 if (visible_entry_id == pending_entry_id_ || !pending_entry_id_) { 289 if (visible_entry_id == pending_entry_id_ || !pending_entry_id_) {
320 received_paint_update_ = true; 290 received_paint_update_ = true;
321 StopObservingIfDone(); 291 StopObservingIfDone();
322 } 292 }
323 } 293 }
324 294
325 void OverscrollNavigationOverlay::DidStopLoading(RenderViewHost* host) {
326 // Use the last committed entry rather than the active one, in case a
327 // pending entry has been created.
328 int committed_entry_id =
329 web_contents_->GetController().GetLastCommittedEntry()->GetUniqueID();
330 if (committed_entry_id == pending_entry_id_ || !pending_entry_id_) {
331 loading_complete_ = true;
332 if (!received_paint_update_ && need_paint_update_) {
333 // Force a repaint after the page is loaded.
334 RenderViewHostImpl* view = static_cast<RenderViewHostImpl*>(host);
335 view->ScheduleComposite();
336 }
337 StopObservingIfDone();
338 }
339 }
340
341 bool OverscrollNavigationOverlay::OnMessageReceived(
342 const IPC::Message& message) {
343 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
344 IPC_BEGIN_MESSAGE_MAP(OverscrollNavigationOverlay, message)
345 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
346 IPC_END_MESSAGE_MAP()
347 return false;
348 }
349
350 } // namespace content 295 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698