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

Side by Side Diff: content/browser/web_contents/web_contents_impl_browsertest.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 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 #include "base/strings/utf_string_conversions.h"
5 #include "base/values.h" 6 #include "base/values.h"
6 #include "content/browser/frame_host/navigation_entry_impl.h" 7 #include "content/browser/frame_host/navigation_entry_impl.h"
7 #include "content/browser/web_contents/web_contents_impl.h" 8 #include "content/browser/web_contents/web_contents_impl.h"
8 #include "content/public/browser/load_notification_details.h" 9 #include "content/public/browser/load_notification_details.h"
9 #include "content/public/browser/navigation_controller.h" 10 #include "content/public/browser/navigation_controller.h"
10 #include "content/public/browser/notification_details.h" 11 #include "content/public/browser/notification_details.h"
11 #include "content/public/browser/notification_observer.h" 12 #include "content/public/browser/notification_observer.h"
12 #include "content/public/browser/notification_types.h" 13 #include "content/public/browser/notification_types.h"
13 #include "content/public/browser/render_view_host.h" 14 #include "content/public/browser/render_view_host.h"
14 #include "content/public/browser/render_widget_host_view.h" 15 #include "content/public/browser/render_widget_host_view.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 } 144 }
144 145
145 gfx::Size rwhv_create_size() const { return rwhv_create_size_; } 146 gfx::Size rwhv_create_size() const { return rwhv_create_size_; }
146 147
147 private: 148 private:
148 Shell* shell_; // Weak ptr. 149 Shell* shell_; // Weak ptr.
149 gfx::Size wcv_new_size_; 150 gfx::Size wcv_new_size_;
150 gfx::Size rwhv_create_size_; 151 gfx::Size rwhv_create_size_;
151 }; 152 };
152 153
154 class LoadingStateChangedDelegate : public WebContentsDelegate {
155 public:
156 LoadingStateChangedDelegate()
157 : loadingStateChangedCount_(0)
158 , loadingStateToDifferentDocumentCount_(0) {
159 }
160
161 // WebContentsDelgate:
162 virtual void LoadingStateChanged(WebContents* contents,
163 bool to_different_document) OVERRIDE {
164 loadingStateChangedCount_++;
165 if (to_different_document)
166 loadingStateToDifferentDocumentCount_++;
Charlie Reis 2014/03/10 20:07:46 nit: 2 space indent
167 }
168
169 int loadingStateChangedCount() const { return loadingStateChangedCount_; }
170 int loadingStateToDifferentDocumentCount() const {
171 return loadingStateToDifferentDocumentCount_;
Charlie Reis 2014/03/10 20:07:46 nit: 2 space indent
172 }
173
174 private:
175 int loadingStateChangedCount_;
176 int loadingStateToDifferentDocumentCount_;
177 };
178
153 // See: http://crbug.com/298193 179 // See: http://crbug.com/298193
154 #if defined(OS_WIN) 180 #if defined(OS_WIN)
155 #define MAYBE_DidStopLoadingDetails DISABLED_DidStopLoadingDetails 181 #define MAYBE_DidStopLoadingDetails DISABLED_DidStopLoadingDetails
156 #else 182 #else
157 #define MAYBE_DidStopLoadingDetails DidStopLoadingDetails 183 #define MAYBE_DidStopLoadingDetails DidStopLoadingDetails
158 #endif 184 #endif
159 185
160 // Test that DidStopLoading includes the correct URL in the details. 186 // Test that DidStopLoading includes the correct URL in the details.
161 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, 187 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
162 MAYBE_DidStopLoadingDetails) { 188 MAYBE_DidStopLoadingDetails) {
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 // Install the observer and navigate cross-site. 393 // Install the observer and navigate cross-site.
368 RenderFrameCreatedObserver observer(shell()); 394 RenderFrameCreatedObserver observer(shell());
369 NavigateToURL(shell(), cross_site_url); 395 NavigateToURL(shell(), cross_site_url);
370 396
371 // The observer should've seen a RenderFrameCreated call for the new frame 397 // The observer should've seen a RenderFrameCreated call for the new frame
372 // and not the old one. 398 // and not the old one.
373 EXPECT_NE(observer.last_rfh(), orig_rfh); 399 EXPECT_NE(observer.last_rfh(), orig_rfh);
374 EXPECT_EQ(observer.last_rfh(), shell()->web_contents()->GetMainFrame()); 400 EXPECT_EQ(observer.last_rfh(), shell()->web_contents()->GetMainFrame());
375 } 401 }
376 402
403 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
404 LoadingStateChangedForSameDocumentNavigation) {
405 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
406 scoped_ptr<LoadingStateChangedDelegate> delegate(
407 new LoadingStateChangedDelegate());
408 shell()->web_contents()->SetDelegate(delegate.get());
409
410 LoadStopNotificationObserver load_observer(
411 &shell()->web_contents()->GetController());
412 TitleWatcher title_watcher(shell()->web_contents(),
413 base::ASCIIToUTF16("pushState"));
Charlie Reis 2014/03/10 20:07:46 nit: Align with first argument.
414 NavigateToURL(shell(), embedded_test_server()->GetURL("/push_state.html"));
415 load_observer.Wait();
416 base::string16 title = title_watcher.WaitAndGetTitle();
417 ASSERT_EQ(title, base::ASCIIToUTF16("pushState"));
418
419 // LoadingStateChanged should be called 4 times, start and stop for the
Charlie Reis 2014/03/10 20:07:46 Colon rather than comma.
420 // initial load of push_state.html, and start and stop for the "navigation"
421 // triggered by history.pushState(). However, the start notification for the
422 // history.pushState() navigation should set to_different_document to false.
423 EXPECT_EQ("pushState", shell()->web_contents()->GetURL().ref());
424 EXPECT_EQ(4, delegate->loadingStateChangedCount());
425 EXPECT_EQ(3, delegate->loadingStateToDifferentDocumentCount());
426 }
427
377 } // namespace content 428 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698