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

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: 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 2596 matching lines...) Expand 10 before | Expand all | Expand 10 after
2607 void WebContentsImpl::ActivateAndShowRepostFormWarningDialog() { 2607 void WebContentsImpl::ActivateAndShowRepostFormWarningDialog() {
2608 Activate(); 2608 Activate();
2609 if (delegate_) 2609 if (delegate_)
2610 delegate_->ShowRepostFormWarningDialog(this); 2610 delegate_->ShowRepostFormWarningDialog(this);
2611 } 2611 }
2612 2612
2613 // Notifies the RenderWidgetHost instance about the fact that the page is 2613 // Notifies the RenderWidgetHost instance about the fact that the page is
2614 // loading, or done loading. 2614 // loading, or done loading.
2615 void WebContentsImpl::SetIsLoading(RenderViewHost* render_view_host, 2615 void WebContentsImpl::SetIsLoading(RenderViewHost* render_view_host,
2616 bool is_loading, 2616 bool is_loading,
2617 bool to_different_document,
2617 LoadNotificationDetails* details) { 2618 LoadNotificationDetails* details) {
2618 if (is_loading == is_loading_) 2619 if (is_loading == is_loading_)
2619 return; 2620 return;
2620 2621
2621 if (!is_loading) { 2622 if (!is_loading) {
2622 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, 2623 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE,
2623 base::string16()); 2624 base::string16());
2624 load_state_host_.clear(); 2625 load_state_host_.clear();
2625 upload_size_ = 0; 2626 upload_size_ = 0;
2626 upload_position_ = 0; 2627 upload_position_ = 0;
2627 } 2628 }
2628 2629
2629 GetRenderManager()->SetIsLoading(is_loading); 2630 GetRenderManager()->SetIsLoading(is_loading);
2630 2631
2631 is_loading_ = is_loading; 2632 is_loading_ = is_loading;
2632 waiting_for_response_ = is_loading; 2633 waiting_for_response_ = is_loading;
2633 2634
2634 if (delegate_) 2635 if (delegate_)
2635 delegate_->LoadingStateChanged(this); 2636 delegate_->LoadingStateChanged(this, to_different_document);
2636 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD); 2637 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD);
2637 2638
2638 std::string url = (details ? details->url.possibly_invalid_spec() : "NULL"); 2639 std::string url = (details ? details->url.possibly_invalid_spec() : "NULL");
2639 if (is_loading) { 2640 if (is_loading) {
2640 TRACE_EVENT_ASYNC_BEGIN1("browser", "WebContentsImpl Loading", this, 2641 TRACE_EVENT_ASYNC_BEGIN1("browser", "WebContentsImpl Loading", this,
2641 "URL", url); 2642 "URL", url);
2642 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2643 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2643 DidStartLoading(render_view_host)); 2644 DidStartLoading(render_view_host));
2644 } else { 2645 } else {
2645 TRACE_EVENT_ASYNC_END1("browser", "WebContentsImpl Loading", this, 2646 TRACE_EVENT_ASYNC_END1("browser", "WebContentsImpl Loading", this,
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
2895 // Ensure fullscreen mode is exited in the |delegate_| since a crashed 2896 // Ensure fullscreen mode is exited in the |delegate_| since a crashed
2896 // renderer may not have made a clean exit. 2897 // renderer may not have made a clean exit.
2897 if (IsFullscreenForCurrentTab()) 2898 if (IsFullscreenForCurrentTab())
2898 ToggleFullscreenMode(false); 2899 ToggleFullscreenMode(false);
2899 2900
2900 // Cancel any visible dialogs so they are not left dangling over the sad tab. 2901 // Cancel any visible dialogs so they are not left dangling over the sad tab.
2901 if (dialog_manager_) 2902 if (dialog_manager_)
2902 dialog_manager_->CancelActiveAndPendingDialogs(this); 2903 dialog_manager_->CancelActiveAndPendingDialogs(this);
2903 2904
2904 ClearPowerSaveBlockers(rvh); 2905 ClearPowerSaveBlockers(rvh);
2905 SetIsLoading(rvh, false, NULL); 2906 SetIsLoading(rvh, false, true, NULL);
2906 NotifyDisconnected(); 2907 NotifyDisconnected();
2907 SetIsCrashed(status, error_code); 2908 SetIsCrashed(status, error_code);
2908 GetView()->OnTabCrashed(GetCrashedStatus(), crashed_error_code_); 2909 GetView()->OnTabCrashed(GetCrashedStatus(), crashed_error_code_);
2909 2910
2910 FOR_EACH_OBSERVER(WebContentsObserver, 2911 FOR_EACH_OBSERVER(WebContentsObserver,
2911 observers_, 2912 observers_,
2912 RenderProcessGone(GetCrashedStatus())); 2913 RenderProcessGone(GetCrashedStatus()));
2913 } 2914 }
2914 2915
2915 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { 2916 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
3024 3025
3025 // Allow the navigation to proceed. 3026 // Allow the navigation to proceed.
3026 GetRenderManager()->SwappedOut(rvh); 3027 GetRenderManager()->SwappedOut(rvh);
3027 } 3028 }
3028 3029
3029 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) { 3030 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) {
3030 if (delegate_ && delegate_->IsPopupOrPanel(this)) 3031 if (delegate_ && delegate_->IsPopupOrPanel(this))
3031 delegate_->MoveContents(this, new_bounds); 3032 delegate_->MoveContents(this, new_bounds);
3032 } 3033 }
3033 3034
3034 void WebContentsImpl::DidStartLoading(RenderFrameHost* render_frame_host) { 3035 void WebContentsImpl::DidStartLoading(RenderFrameHost* render_frame_host,
3035 SetIsLoading(render_frame_host->GetRenderViewHost(), true, NULL); 3036 bool to_different_document) {
3037 SetIsLoading(render_frame_host->GetRenderViewHost(), true,
3038 to_different_document, NULL);
3036 } 3039 }
3037 3040
3038 void WebContentsImpl::DidStopLoading(RenderFrameHost* render_frame_host) { 3041 void WebContentsImpl::DidStopLoading(RenderFrameHost* render_frame_host) {
3039 scoped_ptr<LoadNotificationDetails> details; 3042 scoped_ptr<LoadNotificationDetails> details;
3040 3043
3041 // Use the last committed entry rather than the active one, in case a 3044 // Use the last committed entry rather than the active one, in case a
3042 // pending entry has been created. 3045 // pending entry has been created.
3043 NavigationEntry* entry = controller_.GetLastCommittedEntry(); 3046 NavigationEntry* entry = controller_.GetLastCommittedEntry();
3044 Navigator* navigator = frame_tree_.root()->navigator(); 3047 Navigator* navigator = frame_tree_.root()->navigator();
3045 3048
3046 // An entry may not exist for a stop when loading an initial blank page or 3049 // An entry may not exist for a stop when loading an initial blank page or
3047 // if an iframe injected by script into a blank page finishes loading. 3050 // if an iframe injected by script into a blank page finishes loading.
3048 if (entry) { 3051 if (entry) {
3049 base::TimeDelta elapsed = 3052 base::TimeDelta elapsed =
3050 base::TimeTicks::Now() - navigator->GetCurrentLoadStart(); 3053 base::TimeTicks::Now() - navigator->GetCurrentLoadStart();
3051 3054
3052 details.reset(new LoadNotificationDetails( 3055 details.reset(new LoadNotificationDetails(
3053 entry->GetVirtualURL(), 3056 entry->GetVirtualURL(),
3054 entry->GetTransitionType(), 3057 entry->GetTransitionType(),
3055 elapsed, 3058 elapsed,
3056 &controller_, 3059 &controller_,
3057 controller_.GetCurrentEntryIndex())); 3060 controller_.GetCurrentEntryIndex()));
3058 } 3061 }
3059 3062
3060 SetIsLoading(render_frame_host->GetRenderViewHost(), false, details.get()); 3063 SetIsLoading(render_frame_host->GetRenderViewHost(), false, true,
3064 details.get());
3061 } 3065 }
3062 3066
3063 void WebContentsImpl::DidCancelLoading() { 3067 void WebContentsImpl::DidCancelLoading() {
3064 controller_.DiscardNonCommittedEntries(); 3068 controller_.DiscardNonCommittedEntries();
3065 3069
3066 // Update the URL display. 3070 // Update the URL display.
3067 NotifyNavigationStateChanged(INVALIDATE_TYPE_URL); 3071 NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
3068 } 3072 }
3069 3073
3070 void WebContentsImpl::DidChangeLoadProgress(double progress) { 3074 void WebContentsImpl::DidChangeLoadProgress(double progress) {
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
3630 3634
3631 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { 3635 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) {
3632 if (!delegate_) 3636 if (!delegate_)
3633 return; 3637 return;
3634 const gfx::Size new_size = GetPreferredSize(); 3638 const gfx::Size new_size = GetPreferredSize();
3635 if (new_size != old_size) 3639 if (new_size != old_size)
3636 delegate_->UpdatePreferredSize(this, new_size); 3640 delegate_->UpdatePreferredSize(this, new_size);
3637 } 3641 }
3638 3642
3639 } // namespace content 3643 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/browser/web_contents/web_contents_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698