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

Side by Side Diff: chrome/browser/android/offline_pages/recent_tab_helper_unittest.cc

Issue 2093543002: Do not snapshot error pages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « chrome/browser/android/offline_pages/recent_tab_helper.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chrome/browser/android/offline_pages/recent_tab_helper.h" 5 #include "chrome/browser/android/offline_pages/recent_tab_helper.h"
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/test/test_mock_time_task_runner.h" 8 #include "base/test/test_mock_time_task_runner.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" 10 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
11 #include "chrome/browser/android/offline_pages/test_offline_page_model_builder.h " 11 #include "chrome/browser/android/offline_pages/test_offline_page_model_builder.h "
12 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 12 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
13 #include "components/offline_pages/offline_page_item.h" 13 #include "components/offline_pages/offline_page_item.h"
14 #include "components/offline_pages/offline_page_model.h" 14 #include "components/offline_pages/offline_page_model.h"
15 #include "components/offline_pages/offline_page_test_archiver.h" 15 #include "components/offline_pages/offline_page_test_archiver.h"
16 #include "content/public/browser/navigation_entry.h" 16 #include "content/public/browser/navigation_entry.h"
17 #include "content/public/browser/navigation_handle.h" 17 #include "content/public/browser/navigation_handle.h"
18 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 20
21 namespace offline_pages { 21 namespace offline_pages {
22 22
23 namespace {
24 const GURL kTestPageUrl("http://mystery.site/foo.html");
25 }
26
23 class TestArchiveFactoryImpl : public RecentTabHelper::TestArchiveFactory { 27 class TestArchiveFactoryImpl : public RecentTabHelper::TestArchiveFactory {
24 public: 28 public:
25 explicit TestArchiveFactoryImpl(OfflinePageTestArchiver::Observer* observer); 29 explicit TestArchiveFactoryImpl(OfflinePageTestArchiver::Observer* observer);
26 ~TestArchiveFactoryImpl() override {} 30 ~TestArchiveFactoryImpl() override {}
27 31
28 std::unique_ptr<OfflinePageArchiver> CreateArchiver( 32 std::unique_ptr<OfflinePageArchiver> CreateArchiver(
29 content::WebContents* web_contents) override; 33 content::WebContents* web_contents) override;
30 private: 34 private:
31 OfflinePageTestArchiver::Observer* observer_; // observer owns this. 35 OfflinePageTestArchiver::Observer* observer_; // observer owns this.
32 }; 36 };
33 37
34 class RecentTabHelperTest 38 class RecentTabHelperTest
35 : public ChromeRenderViewHostTestHarness, 39 : public ChromeRenderViewHostTestHarness,
36 public OfflinePageModel::Observer, 40 public OfflinePageModel::Observer,
37 public OfflinePageTestArchiver::Observer { 41 public OfflinePageTestArchiver::Observer {
38 public: 42 public:
39 RecentTabHelperTest(); 43 RecentTabHelperTest();
40 ~RecentTabHelperTest() override {} 44 ~RecentTabHelperTest() override {}
41 45
42 void SetUp() override; 46 void SetUp() override;
43 void SetUpTestArchiver(const GURL& url); 47 void SetUpTestArchiver(const GURL& url);
44 void SetUpMockTaskRunner(); 48 void SetUpMockTaskRunner();
45 const std::vector<OfflinePageItem>& GetAllPages(); 49 const std::vector<OfflinePageItem>& GetAllPages();
46 50
51 void FailLoad(const GURL& url);
52
47 // Runs default thread. 53 // Runs default thread.
48 void RunUntilIdle(); 54 void RunUntilIdle();
49 // Moves forward the snapshot controller's task runner. 55 // Moves forward the snapshot controller's task runner.
50 void FastForwardSnapshotController(); 56 void FastForwardSnapshotController();
51 57
52 RecentTabHelper* recent_tab_helper() const { return recent_tab_helper_; } 58 RecentTabHelper* recent_tab_helper() const { return recent_tab_helper_; }
53 OfflinePageModel* model() const { return model_; } 59 OfflinePageModel* model() const { return model_; }
54 const std::vector<OfflinePageItem>& all_pages() { return all_pages_; } 60 const std::vector<OfflinePageItem>& all_pages() { return all_pages_; }
55 size_t model_changed_count() { return model_changed_count_; } 61 size_t model_changed_count() { return model_changed_count_; }
56 size_t model_removed_count() { return model_removed_count_; } 62 size_t model_removed_count() { return model_removed_count_; }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 128
123 std::unique_ptr<RecentTabHelper::TestArchiveFactory> test_archive_factory( 129 std::unique_ptr<RecentTabHelper::TestArchiveFactory> test_archive_factory(
124 new TestArchiveFactoryImpl(this)); 130 new TestArchiveFactoryImpl(this));
125 recent_tab_helper_->SetArchiveFactoryForTest(std::move(test_archive_factory)); 131 recent_tab_helper_->SetArchiveFactoryForTest(std::move(test_archive_factory));
126 132
127 133
128 model_ = OfflinePageModelFactory::GetForBrowserContext(browser_context()); 134 model_ = OfflinePageModelFactory::GetForBrowserContext(browser_context());
129 model_->AddObserver(this); 135 model_->AddObserver(this);
130 } 136 }
131 137
138 void RecentTabHelperTest::FailLoad(const GURL& url) {
139 controller().LoadURL(url, content::Referrer(), ui::PAGE_TRANSITION_TYPED,
140 std::string());
141 content::RenderFrameHostTester::For(main_rfh())->SimulateNavigationStart(url);
142 content::RenderFrameHostTester::For(main_rfh())->
143 SimulateNavigationError(url, net::ERR_INTERNET_DISCONNECTED);
144 content::RenderFrameHostTester::For(main_rfh())->
145 SimulateNavigationErrorPageCommit();
146 }
147
132 const std::vector<OfflinePageItem>& RecentTabHelperTest::GetAllPages() { 148 const std::vector<OfflinePageItem>& RecentTabHelperTest::GetAllPages() {
133 model()->GetAllPages( 149 model()->GetAllPages(
134 base::Bind(&RecentTabHelperTest::OnGetAllPagesDone, 150 base::Bind(&RecentTabHelperTest::OnGetAllPagesDone,
135 weak_ptr_factory_.GetWeakPtr())); 151 weak_ptr_factory_.GetWeakPtr()));
136 RunUntilIdle(); 152 RunUntilIdle();
137 return all_pages_; 153 return all_pages_;
138 } 154 }
139 155
140 void RecentTabHelperTest::OnGetAllPagesDone( 156 void RecentTabHelperTest::OnGetAllPagesDone(
141 const std::vector<OfflinePageItem>& result) { 157 const std::vector<OfflinePageItem>& result) {
142 all_pages_ = result; 158 all_pages_ = result;
143 } 159 }
144 160
145 void RecentTabHelperTest::RunUntilIdle() { 161 void RecentTabHelperTest::RunUntilIdle() {
146 base::RunLoop().RunUntilIdle(); 162 base::RunLoop().RunUntilIdle();
147 } 163 }
148 164
149 void RecentTabHelperTest::FastForwardSnapshotController() { 165 void RecentTabHelperTest::FastForwardSnapshotController() {
150 const size_t kLongDelayMs = 100*1000; 166 const size_t kLongDelayMs = 100*1000;
151 task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(kLongDelayMs)); 167 task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(kLongDelayMs));
152 } 168 }
153 169
154 TEST_F(RecentTabHelperTest, Basic) { 170 TEST_F(RecentTabHelperTest, Basic) {
155 EXPECT_NE(nullptr, recent_tab_helper()); 171 EXPECT_NE(nullptr, recent_tab_helper());
156 } 172 }
157 173
158 TEST_F(RecentTabHelperTest, SimpleCapture) { 174 TEST_F(RecentTabHelperTest, SimpleCapture) {
159 const GURL url("http://mystery.site/foo.html"); 175 NavigateAndCommit(kTestPageUrl);
160 NavigateAndCommit(url);
161 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame(); 176 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
162 RunUntilIdle(); 177 RunUntilIdle();
163 EXPECT_TRUE(model()->is_loaded()); 178 EXPECT_TRUE(model()->is_loaded());
164 GetAllPages(); 179 GetAllPages();
165 EXPECT_EQ(1U, all_pages().size()); 180 EXPECT_EQ(1U, all_pages().size());
166 EXPECT_EQ(url, all_pages()[0].url); 181 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
167 } 182 }
168 183
169 TEST_F(RecentTabHelperTest, TwoCaptures) { 184 TEST_F(RecentTabHelperTest, TwoCaptures) {
170 const GURL url("http://mystery.site/foo.html"); 185 NavigateAndCommit(kTestPageUrl);
171 NavigateAndCommit(url);
172 // Triggers snapshot after a time delay. 186 // Triggers snapshot after a time delay.
173 recent_tab_helper()->DocumentAvailableInMainFrame(); 187 recent_tab_helper()->DocumentAvailableInMainFrame();
174 RunUntilIdle(); 188 RunUntilIdle();
175 EXPECT_TRUE(model()->is_loaded()); 189 EXPECT_TRUE(model()->is_loaded());
176 EXPECT_EQ(0U, model_changed_count()); 190 EXPECT_EQ(0U, model_changed_count());
177 // Move the snapshot controller's time forward so it gets past timeouts. 191 // Move the snapshot controller's time forward so it gets past timeouts.
178 FastForwardSnapshotController(); 192 FastForwardSnapshotController();
179 RunUntilIdle(); 193 RunUntilIdle();
180 EXPECT_EQ(1U, model_changed_count()); 194 EXPECT_EQ(1U, model_changed_count());
181 EXPECT_EQ(0U, model_removed_count()); 195 EXPECT_EQ(0U, model_removed_count());
182 GetAllPages(); 196 GetAllPages();
183 EXPECT_EQ(1U, all_pages().size()); 197 EXPECT_EQ(1U, all_pages().size());
184 EXPECT_EQ(url, all_pages()[0].url); 198 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
185 199
186 // Triggers snapshot immediately; 200 // Triggers snapshot immediately;
187 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame(); 201 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
188 RunUntilIdle(); 202 RunUntilIdle();
189 EXPECT_EQ(2U, model_changed_count()); 203 EXPECT_EQ(2U, model_changed_count());
190 EXPECT_EQ(1U, model_removed_count()); 204 EXPECT_EQ(1U, model_removed_count());
191 // the same page should be simply overridden. 205 // the same page should be simply overridden.
192 GetAllPages(); 206 GetAllPages();
193 EXPECT_EQ(1U, all_pages().size()); 207 EXPECT_EQ(1U, all_pages().size());
194 EXPECT_EQ(url, all_pages()[0].url); 208 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
209 }
210
211 TEST_F(RecentTabHelperTest, NoCaptureOnErrorPage) {
212 FailLoad(kTestPageUrl);
213 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
214 RunUntilIdle();
215 EXPECT_TRUE(model()->is_loaded());
216 GetAllPages();
217 EXPECT_EQ(0U, all_pages().size());
195 } 218 }
196 219
197 } // namespace offline_pages 220 } // namespace offline_pages
OLDNEW
« no previous file with comments | « chrome/browser/android/offline_pages/recent_tab_helper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698