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

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 161113002: Fix pushState causing stop/reload button and favicon to flicker. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 2561 matching lines...) Expand 10 before | Expand all | Expand 10 after
2572 void WebContentsImpl::ActivateAndShowRepostFormWarningDialog() { 2572 void WebContentsImpl::ActivateAndShowRepostFormWarningDialog() {
2573 Activate(); 2573 Activate();
2574 if (delegate_) 2574 if (delegate_)
2575 delegate_->ShowRepostFormWarningDialog(this); 2575 delegate_->ShowRepostFormWarningDialog(this);
2576 } 2576 }
2577 2577
2578 // Notifies the RenderWidgetHost instance about the fact that the page is 2578 // Notifies the RenderWidgetHost instance about the fact that the page is
2579 // loading, or done loading. 2579 // loading, or done loading.
2580 void WebContentsImpl::SetIsLoading(RenderViewHost* render_view_host, 2580 void WebContentsImpl::SetIsLoading(RenderViewHost* render_view_host,
2581 bool is_loading, 2581 bool is_loading,
2582 bool to_different_document,
2582 LoadNotificationDetails* details) { 2583 LoadNotificationDetails* details) {
2583 if (is_loading == is_loading_) 2584 if (is_loading == is_loading_)
2584 return; 2585 return;
2585 2586
2586 if (!is_loading) { 2587 if (!is_loading) {
2587 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, 2588 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE,
2588 base::string16()); 2589 base::string16());
2589 load_state_host_.clear(); 2590 load_state_host_.clear();
2590 upload_size_ = 0; 2591 upload_size_ = 0;
2591 upload_position_ = 0; 2592 upload_position_ = 0;
2592 } 2593 }
2593 2594
2594 GetRenderManager()->SetIsLoading(is_loading); 2595 GetRenderManager()->SetIsLoading(is_loading);
2595 2596
2596 is_loading_ = is_loading; 2597 is_loading_ = is_loading;
2597 waiting_for_response_ = is_loading; 2598 waiting_for_response_ = is_loading;
2598 2599
2599 if (delegate_) 2600 if (delegate_)
2600 delegate_->LoadingStateChanged(this); 2601 delegate_->LoadingStateChanged(this, to_different_document);
2601 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD); 2602 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD);
2602 2603
2603 std::string url = (details ? details->url.possibly_invalid_spec() : "NULL"); 2604 std::string url = (details ? details->url.possibly_invalid_spec() : "NULL");
2604 if (is_loading) { 2605 if (is_loading) {
2605 TRACE_EVENT_ASYNC_BEGIN1("browser", "WebContentsImpl Loading", this, 2606 TRACE_EVENT_ASYNC_BEGIN1("browser", "WebContentsImpl Loading", this,
2606 "URL", url); 2607 "URL", url);
2607 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2608 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2608 DidStartLoading(render_view_host)); 2609 DidStartLoading(render_view_host));
2609 } else { 2610 } else {
2610 TRACE_EVENT_ASYNC_END1("browser", "WebContentsImpl Loading", this, 2611 TRACE_EVENT_ASYNC_END1("browser", "WebContentsImpl Loading", this,
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
2865 // Ensure fullscreen mode is exited in the |delegate_| since a crashed 2866 // Ensure fullscreen mode is exited in the |delegate_| since a crashed
2866 // renderer may not have made a clean exit. 2867 // renderer may not have made a clean exit.
2867 if (IsFullscreenForCurrentTab()) 2868 if (IsFullscreenForCurrentTab())
2868 ToggleFullscreenMode(false); 2869 ToggleFullscreenMode(false);
2869 2870
2870 // Cancel any visible dialogs so they are not left dangling over the sad tab. 2871 // Cancel any visible dialogs so they are not left dangling over the sad tab.
2871 if (dialog_manager_) 2872 if (dialog_manager_)
2872 dialog_manager_->CancelActiveAndPendingDialogs(this); 2873 dialog_manager_->CancelActiveAndPendingDialogs(this);
2873 2874
2874 ClearPowerSaveBlockers(rvh); 2875 ClearPowerSaveBlockers(rvh);
2875 SetIsLoading(rvh, false, NULL); 2876 SetIsLoading(rvh, false, true, NULL);
2876 NotifyDisconnected(); 2877 NotifyDisconnected();
2877 SetIsCrashed(status, error_code); 2878 SetIsCrashed(status, error_code);
2878 GetView()->OnTabCrashed(GetCrashedStatus(), crashed_error_code_); 2879 GetView()->OnTabCrashed(GetCrashedStatus(), crashed_error_code_);
2879 2880
2880 FOR_EACH_OBSERVER(WebContentsObserver, 2881 FOR_EACH_OBSERVER(WebContentsObserver,
2881 observers_, 2882 observers_,
2882 RenderProcessGone(GetCrashedStatus())); 2883 RenderProcessGone(GetCrashedStatus()));
2883 } 2884 }
2884 2885
2885 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { 2886 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2994 2995
2995 // Allow the navigation to proceed. 2996 // Allow the navigation to proceed.
2996 GetRenderManager()->SwappedOut(rvh); 2997 GetRenderManager()->SwappedOut(rvh);
2997 } 2998 }
2998 2999
2999 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) { 3000 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) {
3000 if (delegate_ && delegate_->IsPopupOrPanel(this)) 3001 if (delegate_ && delegate_->IsPopupOrPanel(this))
3001 delegate_->MoveContents(this, new_bounds); 3002 delegate_->MoveContents(this, new_bounds);
3002 } 3003 }
3003 3004
3004 void WebContentsImpl::DidStartLoading(RenderFrameHost* render_frame_host) { 3005 void WebContentsImpl::DidStartLoading(RenderFrameHost* render_frame_host,
3005 SetIsLoading(render_frame_host->GetRenderViewHost(), true, NULL); 3006 bool to_different_document) {
3007 SetIsLoading(render_frame_host->GetRenderViewHost(), true,
3008 to_different_document, NULL);
Charlie Reis 2014/03/10 20:07:46 nit: Align with first argument.
3006 } 3009 }
3007 3010
3008 void WebContentsImpl::DidStopLoading(RenderFrameHost* render_frame_host) { 3011 void WebContentsImpl::DidStopLoading(RenderFrameHost* render_frame_host) {
3009 scoped_ptr<LoadNotificationDetails> details; 3012 scoped_ptr<LoadNotificationDetails> details;
3010 3013
3011 // Use the last committed entry rather than the active one, in case a 3014 // Use the last committed entry rather than the active one, in case a
3012 // pending entry has been created. 3015 // pending entry has been created.
3013 NavigationEntry* entry = controller_.GetLastCommittedEntry(); 3016 NavigationEntry* entry = controller_.GetLastCommittedEntry();
3014 Navigator* navigator = frame_tree_.root()->navigator(); 3017 Navigator* navigator = frame_tree_.root()->navigator();
3015 3018
3016 // An entry may not exist for a stop when loading an initial blank page or 3019 // An entry may not exist for a stop when loading an initial blank page or
3017 // if an iframe injected by script into a blank page finishes loading. 3020 // if an iframe injected by script into a blank page finishes loading.
3018 if (entry) { 3021 if (entry) {
3019 base::TimeDelta elapsed = 3022 base::TimeDelta elapsed =
3020 base::TimeTicks::Now() - navigator->GetCurrentLoadStart(); 3023 base::TimeTicks::Now() - navigator->GetCurrentLoadStart();
3021 3024
3022 details.reset(new LoadNotificationDetails( 3025 details.reset(new LoadNotificationDetails(
3023 entry->GetVirtualURL(), 3026 entry->GetVirtualURL(),
3024 entry->GetTransitionType(), 3027 entry->GetTransitionType(),
3025 elapsed, 3028 elapsed,
3026 &controller_, 3029 &controller_,
3027 controller_.GetCurrentEntryIndex())); 3030 controller_.GetCurrentEntryIndex()));
3028 } 3031 }
3029 3032
3030 SetIsLoading(render_frame_host->GetRenderViewHost(), false, details.get()); 3033 SetIsLoading(render_frame_host->GetRenderViewHost(), false, true,
3034 details.get());
Charlie Reis 2014/03/10 20:07:46 nit: align with first argument.
3031 } 3035 }
3032 3036
3033 void WebContentsImpl::DidCancelLoading() { 3037 void WebContentsImpl::DidCancelLoading() {
3034 controller_.DiscardNonCommittedEntries(); 3038 controller_.DiscardNonCommittedEntries();
3035 3039
3036 // Update the URL display. 3040 // Update the URL display.
3037 NotifyNavigationStateChanged(INVALIDATE_TYPE_URL); 3041 NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
3038 } 3042 }
3039 3043
3040 void WebContentsImpl::DidChangeLoadProgress(double progress) { 3044 void WebContentsImpl::DidChangeLoadProgress(double progress) {
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
3600 3604
3601 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { 3605 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) {
3602 if (!delegate_) 3606 if (!delegate_)
3603 return; 3607 return;
3604 const gfx::Size new_size = GetPreferredSize(); 3608 const gfx::Size new_size = GetPreferredSize();
3605 if (new_size != old_size) 3609 if (new_size != old_size)
3606 delegate_->UpdatePreferredSize(this, new_size); 3610 delegate_->UpdatePreferredSize(this, new_size);
3607 } 3611 }
3608 3612
3609 } // namespace content 3613 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698