| Index: content/browser/web_contents/web_contents_impl_browsertest.cc
|
| diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
|
| index 2a09fe216f1f134087def75d6edf02e279f0a5e6..64c209321285a4da50f0a869fc6102033eeec6b3 100644
|
| --- a/content/browser/web_contents/web_contents_impl_browsertest.cc
|
| +++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
|
| @@ -158,7 +158,7 @@ class LoadingStateChangedDelegate : public WebContentsDelegate {
|
| , loadingStateToDifferentDocumentCount_(0) {
|
| }
|
|
|
| - // WebContentsDelgate:
|
| + // WebContentsDelegate:
|
| virtual void LoadingStateChanged(WebContents* contents,
|
| bool to_different_document) OVERRIDE {
|
| loadingStateChangedCount_++;
|
| @@ -456,5 +456,64 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
|
| EXPECT_TRUE(new_web_contents_observer.RenderViewCreatedCalled());
|
| }
|
|
|
| +struct LoadProgressDelegateAndObserver : public WebContentsDelegate,
|
| + public WebContentsObserver {
|
| + LoadProgressDelegateAndObserver(Shell* shell)
|
| + : WebContentsObserver(shell->web_contents()),
|
| + did_start_loading(false),
|
| + did_stop_loading(false) {
|
| + web_contents()->SetDelegate(this);
|
| + }
|
| +
|
| + // WebContentsDelegate:
|
| + virtual void LoadProgressChanged(WebContents* source,
|
| + double progress) OVERRIDE {
|
| + EXPECT_TRUE(did_start_loading);
|
| + EXPECT_FALSE(did_stop_loading);
|
| + progresses.push_back(progress);
|
| + }
|
| +
|
| + // WebContentsObserver:
|
| + virtual void DidStartLoading(RenderViewHost* render_view_host) OVERRIDE {
|
| + EXPECT_FALSE(did_start_loading);
|
| + EXPECT_EQ(0U, progresses.size());
|
| + EXPECT_FALSE(did_stop_loading);
|
| + did_start_loading = true;
|
| + }
|
| +
|
| + virtual void DidStopLoading(RenderViewHost* render_view_host) OVERRIDE {
|
| + EXPECT_TRUE(did_start_loading);
|
| + EXPECT_GE(progresses.size(), 1U);
|
| + EXPECT_FALSE(did_stop_loading);
|
| + did_stop_loading = true;
|
| + }
|
| +
|
| + bool did_start_loading;
|
| + std::vector<double> progresses;
|
| + bool did_stop_loading;
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, LoadProgress) {
|
| + ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
| + scoped_ptr<LoadProgressDelegateAndObserver> delegate(
|
| + new LoadProgressDelegateAndObserver(shell()));
|
| +
|
| + NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html"));
|
| +
|
| + const std::vector<double>& progresses = delegate->progresses;
|
| + // All updates should be in order ...
|
| + if (std::adjacent_find(progresses.begin(),
|
| + progresses.end(),
|
| + std::greater<double>()) != progresses.end()) {
|
| + ADD_FAILURE() << "Progress values should be in order: "
|
| + << ::testing::PrintToString(progresses);
|
| + }
|
| +
|
| + // ... and the last one should be 1.0, meaning complete.
|
| + ASSERT_GE(progresses.size(), 1U)
|
| + << "There should be at least one progress update";
|
| + EXPECT_EQ(1.0, *progresses.rbegin());
|
| +}
|
| +
|
| } // namespace content
|
|
|
|
|