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

Side by Side Diff: content/browser/frame_host/navigation_controller_impl.cc

Issue 2174293002: NonValidatingReload: Monitor reload operations in NavigationControllerImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [rebase] Created 4 years, 2 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 /* 5 /*
6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * 10 *
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 pending_entry_index_(-1), 219 pending_entry_index_(-1),
220 transient_entry_index_(-1), 220 transient_entry_index_(-1),
221 delegate_(delegate), 221 delegate_(delegate),
222 max_restored_page_id_(-1), 222 max_restored_page_id_(-1),
223 ssl_manager_(this), 223 ssl_manager_(this),
224 needs_reload_(false), 224 needs_reload_(false),
225 is_initial_navigation_(true), 225 is_initial_navigation_(true),
226 in_navigate_to_pending_entry_(false), 226 in_navigate_to_pending_entry_(false),
227 pending_reload_(ReloadType::NONE), 227 pending_reload_(ReloadType::NONE),
228 get_timestamp_callback_(base::Bind(&base::Time::Now)), 228 get_timestamp_callback_(base::Bind(&base::Time::Now)),
229 screenshot_manager_(new NavigationEntryScreenshotManager(this)) { 229 screenshot_manager_(new NavigationEntryScreenshotManager(this)),
230 last_committed_reload_type_(ReloadType::NONE) {
230 DCHECK(browser_context_); 231 DCHECK(browser_context_);
231 } 232 }
232 233
233 NavigationControllerImpl::~NavigationControllerImpl() { 234 NavigationControllerImpl::~NavigationControllerImpl() {
234 DiscardNonCommittedEntriesInternal(); 235 DiscardNonCommittedEntriesInternal();
235 } 236 }
236 237
237 WebContents* NavigationControllerImpl::GetWebContents() const { 238 WebContents* NavigationControllerImpl::GetWebContents() const {
238 return delegate_->GetWebContents(); 239 return delegate_->GetWebContents();
239 } 240 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 if (current_index != -1) { 323 if (current_index != -1) {
323 entry = GetEntryAtIndex(current_index); 324 entry = GetEntryAtIndex(current_index);
324 } 325 }
325 } 326 }
326 327
327 // If we are no where, then we can't reload. TODO(darin): We should add a 328 // If we are no where, then we can't reload. TODO(darin): We should add a
328 // CanReload method. 329 // CanReload method.
329 if (!entry) 330 if (!entry)
330 return; 331 return;
331 332
333 // Check if previous navigation was a reload to track consecutive reload
334 // operations.
335 if (last_committed_reload_type_ != ReloadType::NONE) {
336 DCHECK(!last_committed_reload_time_.is_null());
337 base::Time now =
338 time_smoother_.GetSmoothedTime(get_timestamp_callback_.Run());
339 DCHECK_GT(now, last_committed_reload_time_);
340 if (!last_committed_reload_time_.is_null() &&
341 now > last_committed_reload_time_) {
342 base::TimeDelta delta = now - last_committed_reload_time_;
343 UMA_HISTOGRAM_MEDIUM_TIMES("Navigation.Reload.ReloadToReloadDuration",
344 delta);
345 if (last_committed_reload_type_ == ReloadType::MAIN_RESOURCE) {
346 UMA_HISTOGRAM_MEDIUM_TIMES(
347 "Navigation.Reload.ReloadMainResourceToReloadDuration", delta);
348 }
349 }
350 }
351
352 // Set ReloadType for |entry| in order to check it at commit time.
353 entry->set_reload_type(reload_type);
354
332 if (g_check_for_repost && check_for_repost && 355 if (g_check_for_repost && check_for_repost &&
333 entry->GetHasPostData()) { 356 entry->GetHasPostData()) {
334 // The user is asking to reload a page with POST data. Prompt to make sure 357 // The user is asking to reload a page with POST data. Prompt to make sure
335 // they really want to do this. If they do, the dialog will call us back 358 // they really want to do this. If they do, the dialog will call us back
336 // with check_for_repost = false. 359 // with check_for_repost = false.
337 delegate_->NotifyBeforeFormRepostWarningShow(); 360 delegate_->NotifyBeforeFormRepostWarningShow();
338 361
339 pending_reload_ = reload_type; 362 pending_reload_ = reload_type;
340 delegate_->ActivateAndShowRepostFormWarningDialog(); 363 delegate_->ActivateAndShowRepostFormWarningDialog();
341 } else { 364 } else {
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 818
796 // The renderer tells us whether the navigation replaces the current entry. 819 // The renderer tells us whether the navigation replaces the current entry.
797 details->did_replace_entry = params.should_replace_current_entry; 820 details->did_replace_entry = params.should_replace_current_entry;
798 821
799 // Do navigation-type specific actions. These will make and commit an entry. 822 // Do navigation-type specific actions. These will make and commit an entry.
800 details->type = ClassifyNavigation(rfh, params); 823 details->type = ClassifyNavigation(rfh, params);
801 824
802 // is_in_page must be computed before the entry gets committed. 825 // is_in_page must be computed before the entry gets committed.
803 details->is_in_page = is_navigation_within_page; 826 details->is_in_page = is_navigation_within_page;
804 827
828 // Save reload type and timestamp for a reload navigation to detect
829 // consecutive reloads when the next reload is requested.
830 if (PendingEntryMatchesHandle(rfh->navigation_handle())) {
831 if (pending_entry_->reload_type() != ReloadType::NONE) {
832 last_committed_reload_type_ = pending_entry_->reload_type();
833 last_committed_reload_time_ =
834 time_smoother_.GetSmoothedTime(get_timestamp_callback_.Run());
835 } else if (!pending_entry_->is_renderer_initiated() ||
836 params.gesture == NavigationGestureUser) {
837 last_committed_reload_type_ = ReloadType::NONE;
838 last_committed_reload_time_ = base::Time();
839 }
840 }
841
805 switch (details->type) { 842 switch (details->type) {
806 case NAVIGATION_TYPE_NEW_PAGE: 843 case NAVIGATION_TYPE_NEW_PAGE:
807 RendererDidNavigateToNewPage(rfh, params, details->is_in_page, 844 RendererDidNavigateToNewPage(rfh, params, details->is_in_page,
808 details->did_replace_entry); 845 details->did_replace_entry);
809 break; 846 break;
810 case NAVIGATION_TYPE_EXISTING_PAGE: 847 case NAVIGATION_TYPE_EXISTING_PAGE:
811 details->did_replace_entry = details->is_in_page; 848 details->did_replace_entry = details->is_in_page;
812 RendererDidNavigateToExistingPage(rfh, params, details->is_in_page); 849 RendererDidNavigateToExistingPage(rfh, params, details->is_in_page);
813 break; 850 break;
814 case NAVIGATION_TYPE_SAME_PAGE: 851 case NAVIGATION_TYPE_SAME_PAGE:
(...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after
2104 } 2141 }
2105 } 2142 }
2106 } 2143 }
2107 2144
2108 void NavigationControllerImpl::SetGetTimestampCallbackForTest( 2145 void NavigationControllerImpl::SetGetTimestampCallbackForTest(
2109 const base::Callback<base::Time()>& get_timestamp_callback) { 2146 const base::Callback<base::Time()>& get_timestamp_callback) {
2110 get_timestamp_callback_ = get_timestamp_callback; 2147 get_timestamp_callback_ = get_timestamp_callback;
2111 } 2148 }
2112 2149
2113 } // namespace content 2150 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698