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

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

Issue 2092983002: Change the RecentTabHelper to only capture the last one page in a tab. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added unittests, process 'no id' case 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
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 { 23 namespace {
24 const GURL kTestPageUrl("http://mystery.site/foo.html"); 24 const GURL kTestPageUrl("http://mystery.site/foo.html");
25 const GURL kTestPageUrlOther("http://crazy.site/foo_other.html");
26 const int kTabId = 153;
25 } 27 }
26 28
27 class TestArchiveFactoryImpl : public RecentTabHelper::TestArchiveFactory { 29 class TestDelegate: public RecentTabHelper::Delegate {
28 public: 30 public:
29 explicit TestArchiveFactoryImpl(OfflinePageTestArchiver::Observer* observer); 31 explicit TestDelegate(
30 ~TestArchiveFactoryImpl() override {} 32 OfflinePageTestArchiver::Observer* observer,
33 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
34 int tab_id,
35 bool tab_id_result);
36 ~TestDelegate() override {}
31 37
32 std::unique_ptr<OfflinePageArchiver> CreateArchiver( 38 std::unique_ptr<OfflinePageArchiver> CreatePageArchiver(
33 content::WebContents* web_contents) override; 39 content::WebContents* web_contents) override;
40 scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
41 // There is no expectations that tab_id is always present.
42 bool GetTabId(int* tab_id, content::WebContents* web_contents) override;
43
34 private: 44 private:
35 OfflinePageTestArchiver::Observer* observer_; // observer owns this. 45 OfflinePageTestArchiver::Observer* observer_; // observer owns this.
46 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
47 int tab_id_;
48 bool tab_id_result_;
36 }; 49 };
37 50
38 class RecentTabHelperTest 51 class RecentTabHelperTest
39 : public ChromeRenderViewHostTestHarness, 52 : public ChromeRenderViewHostTestHarness,
40 public OfflinePageModel::Observer, 53 public OfflinePageModel::Observer,
41 public OfflinePageTestArchiver::Observer { 54 public OfflinePageTestArchiver::Observer {
42 public: 55 public:
43 RecentTabHelperTest(); 56 RecentTabHelperTest();
44 ~RecentTabHelperTest() override {} 57 ~RecentTabHelperTest() override {}
45 58
46 void SetUp() override; 59 void SetUp() override;
47 void SetUpTestArchiver(const GURL& url);
48 void SetUpMockTaskRunner();
49 const std::vector<OfflinePageItem>& GetAllPages(); 60 const std::vector<OfflinePageItem>& GetAllPages();
50 61
51 void FailLoad(const GURL& url); 62 void FailLoad(const GURL& url);
52 63
53 // Runs default thread. 64 // Runs default thread.
54 void RunUntilIdle(); 65 void RunUntilIdle();
55 // Moves forward the snapshot controller's task runner. 66 // Moves forward the snapshot controller's task runner.
56 void FastForwardSnapshotController(); 67 void FastForwardSnapshotController();
57 68
58 RecentTabHelper* recent_tab_helper() const { return recent_tab_helper_; } 69 RecentTabHelper* recent_tab_helper() const { return recent_tab_helper_; }
70
59 OfflinePageModel* model() const { return model_; } 71 OfflinePageModel* model() const { return model_; }
72
60 const std::vector<OfflinePageItem>& all_pages() { return all_pages_; } 73 const std::vector<OfflinePageItem>& all_pages() { return all_pages_; }
74
75 scoped_refptr<base::TestMockTimeTaskRunner>& task_runner() {
76 return task_runner_;
77 }
78
61 size_t model_changed_count() { return model_changed_count_; } 79 size_t model_changed_count() { return model_changed_count_; }
62 size_t model_removed_count() { return model_removed_count_; } 80 size_t model_removed_count() { return model_removed_count_; }
63 81
64 // OfflinePageModel::Observer 82 // OfflinePageModel::Observer
65 void OfflinePageModelLoaded(OfflinePageModel* model) override { } 83 void OfflinePageModelLoaded(OfflinePageModel* model) override { }
66 void OfflinePageModelChanged(OfflinePageModel* model) override { 84 void OfflinePageModelChanged(OfflinePageModel* model) override {
67 model_changed_count_++; 85 model_changed_count_++;
68 } 86 }
69 void OfflinePageDeleted(int64_t, const offline_pages::ClientId&) override { 87 void OfflinePageDeleted(int64_t, const offline_pages::ClientId&) override {
70 model_removed_count_++; 88 model_removed_count_++;
(...skipping 10 matching lines...) Expand all
81 size_t model_changed_count_; 99 size_t model_changed_count_;
82 size_t model_removed_count_; 100 size_t model_removed_count_;
83 std::vector<OfflinePageItem> all_pages_; 101 std::vector<OfflinePageItem> all_pages_;
84 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 102 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
85 103
86 base::WeakPtrFactory<RecentTabHelperTest> weak_ptr_factory_; 104 base::WeakPtrFactory<RecentTabHelperTest> weak_ptr_factory_;
87 105
88 DISALLOW_COPY_AND_ASSIGN(RecentTabHelperTest); 106 DISALLOW_COPY_AND_ASSIGN(RecentTabHelperTest);
89 }; 107 };
90 108
91 TestArchiveFactoryImpl::TestArchiveFactoryImpl( 109 TestDelegate::TestDelegate(
92 OfflinePageTestArchiver::Observer* observer) 110 OfflinePageTestArchiver::Observer* observer,
93 : observer_(observer) { 111 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
112 int tab_id,
113 bool tab_id_result)
114 : observer_(observer),
115 task_runner_(task_runner),
116 tab_id_(tab_id),
117 tab_id_result_(tab_id_result) {
94 } 118 }
95 119
96 std::unique_ptr<OfflinePageArchiver> TestArchiveFactoryImpl::CreateArchiver( 120 std::unique_ptr<OfflinePageArchiver> TestDelegate::CreatePageArchiver(
97 content::WebContents* web_contents) { 121 content::WebContents* web_contents) {
98 const size_t kArchiveSizeToReport = 1234; 122 const size_t kArchiveSizeToReport = 1234;
99 std::unique_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver( 123 std::unique_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver(
100 observer_, 124 observer_,
101 web_contents->GetLastCommittedURL(), 125 web_contents->GetLastCommittedURL(),
102 offline_pages::OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED, 126 offline_pages::OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED,
103 kArchiveSizeToReport, 127 kArchiveSizeToReport,
104 base::ThreadTaskRunnerHandle::Get())); 128 base::ThreadTaskRunnerHandle::Get()));
105 return std::move(archiver); 129 return std::move(archiver);
106 } 130 }
107 131
132 scoped_refptr<base::SingleThreadTaskRunner> TestDelegate::GetTaskRunner() {
133 return task_runner_;
134 }
135 // There is no expectations that tab_id is always present.
136 bool TestDelegate::GetTabId(int* tab_id, content::WebContents* web_contents) {
137 *tab_id = tab_id_;
138 return tab_id_result_;
139 }
140
108 RecentTabHelperTest::RecentTabHelperTest() 141 RecentTabHelperTest::RecentTabHelperTest()
109 : recent_tab_helper_(nullptr), 142 : recent_tab_helper_(nullptr),
110 model_(nullptr), 143 model_(nullptr),
111 model_changed_count_(0), 144 model_changed_count_(0),
112 model_removed_count_(0), 145 model_removed_count_(0),
113 task_runner_(new base::TestMockTimeTaskRunner), 146 task_runner_(new base::TestMockTimeTaskRunner),
114 weak_ptr_factory_(this) { 147 weak_ptr_factory_(this) {
115 } 148 }
116 149
117 void RecentTabHelperTest::SetUp() { 150 void RecentTabHelperTest::SetUp() {
118 content::RenderViewHostTestHarness::SetUp(); 151 content::RenderViewHostTestHarness::SetUp();
119 // Sets up the factory for testing. 152 // Sets up the factory for testing.
120 OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse( 153 OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse(
121 browser_context(), BuildTestOfflinePageModel); 154 browser_context(), BuildTestOfflinePageModel);
122 RunUntilIdle(); 155 RunUntilIdle();
123 156
124 RecentTabHelper::CreateForWebContents(web_contents()); 157 RecentTabHelper::CreateForWebContents(web_contents());
125 recent_tab_helper_ = 158 recent_tab_helper_ =
126 RecentTabHelper::FromWebContents(web_contents()); 159 RecentTabHelper::FromWebContents(web_contents());
127 recent_tab_helper_->SetTaskRunnerForTest(task_runner_);
128 160
129 std::unique_ptr<RecentTabHelper::TestArchiveFactory> test_archive_factory( 161 std::unique_ptr<RecentTabHelper::Delegate> test_delegate(
130 new TestArchiveFactoryImpl(this)); 162 new TestDelegate(this, task_runner_, kTabId, true));
131 recent_tab_helper_->SetArchiveFactoryForTest(std::move(test_archive_factory)); 163 recent_tab_helper_->Initialize(std::move(test_delegate));
132 164
133 165
134 model_ = OfflinePageModelFactory::GetForBrowserContext(browser_context()); 166 model_ = OfflinePageModelFactory::GetForBrowserContext(browser_context());
135 model_->AddObserver(this); 167 model_->AddObserver(this);
136 } 168 }
137 169
138 void RecentTabHelperTest::FailLoad(const GURL& url) { 170 void RecentTabHelperTest::FailLoad(const GURL& url) {
139 controller().LoadURL(url, content::Referrer(), ui::PAGE_TRANSITION_TYPED, 171 controller().LoadURL(url, content::Referrer(), ui::PAGE_TRANSITION_TYPED,
140 std::string()); 172 std::string());
141 content::RenderFrameHostTester::For(main_rfh())->SimulateNavigationStart(url); 173 content::RenderFrameHostTester::For(main_rfh())->SimulateNavigationStart(url);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 TEST_F(RecentTabHelperTest, SimpleCapture) { 206 TEST_F(RecentTabHelperTest, SimpleCapture) {
175 NavigateAndCommit(kTestPageUrl); 207 NavigateAndCommit(kTestPageUrl);
176 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame(); 208 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
177 RunUntilIdle(); 209 RunUntilIdle();
178 EXPECT_TRUE(model()->is_loaded()); 210 EXPECT_TRUE(model()->is_loaded());
179 GetAllPages(); 211 GetAllPages();
180 EXPECT_EQ(1U, all_pages().size()); 212 EXPECT_EQ(1U, all_pages().size());
181 EXPECT_EQ(kTestPageUrl, all_pages()[0].url); 213 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
182 } 214 }
183 215
184 TEST_F(RecentTabHelperTest, TwoCaptures) { 216 TEST_F(RecentTabHelperTest, NoTabIdNoCapture) {
217 // Create delegate that returns 'false' as TabId retrieval result.
218 std::unique_ptr<RecentTabHelper::Delegate> test_delegate(
219 new TestDelegate(this, task_runner(), kTabId, false));
220 recent_tab_helper()->Initialize(std::move(test_delegate));
221
222 NavigateAndCommit(kTestPageUrl);
223 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
224 RunUntilIdle();
225 EXPECT_TRUE(model()->is_loaded());
226 GetAllPages();
227 // No page shodul be captured.
228 EXPECT_EQ(0U, all_pages().size());
229 }
230
231 // Should end up with 1 page.
232 TEST_F(RecentTabHelperTest, TwoCapturesSameUrl) {
185 NavigateAndCommit(kTestPageUrl); 233 NavigateAndCommit(kTestPageUrl);
186 // Triggers snapshot after a time delay. 234 // Triggers snapshot after a time delay.
187 recent_tab_helper()->DocumentAvailableInMainFrame(); 235 recent_tab_helper()->DocumentAvailableInMainFrame();
188 RunUntilIdle(); 236 RunUntilIdle();
189 EXPECT_TRUE(model()->is_loaded()); 237 EXPECT_TRUE(model()->is_loaded());
190 EXPECT_EQ(0U, model_changed_count()); 238 EXPECT_EQ(0U, model_changed_count());
191 // Move the snapshot controller's time forward so it gets past timeouts. 239 // Move the snapshot controller's time forward so it gets past timeouts.
192 FastForwardSnapshotController(); 240 FastForwardSnapshotController();
193 RunUntilIdle(); 241 RunUntilIdle();
194 EXPECT_EQ(1U, model_changed_count()); 242 EXPECT_EQ(1U, model_changed_count());
195 EXPECT_EQ(0U, model_removed_count()); 243 EXPECT_EQ(0U, model_removed_count());
196 GetAllPages(); 244 GetAllPages();
197 EXPECT_EQ(1U, all_pages().size()); 245 EXPECT_EQ(1U, all_pages().size());
198 EXPECT_EQ(kTestPageUrl, all_pages()[0].url); 246 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
199 247
200 // Triggers snapshot immediately; 248 // Triggers snapshot immediately;
201 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame(); 249 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
202 RunUntilIdle(); 250 RunUntilIdle();
203 EXPECT_EQ(2U, model_changed_count()); 251 EXPECT_EQ(2U, model_changed_count());
204 EXPECT_EQ(1U, model_removed_count()); 252 EXPECT_EQ(1U, model_removed_count());
205 // the same page should be simply overridden. 253 // the same page should be simply overridden.
206 GetAllPages(); 254 GetAllPages();
207 EXPECT_EQ(1U, all_pages().size()); 255 EXPECT_EQ(1U, all_pages().size());
208 EXPECT_EQ(kTestPageUrl, all_pages()[0].url); 256 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
209 } 257 }
210 258
259 // Should end up with 1 page.
260 TEST_F(RecentTabHelperTest, TwoCapturesDifferentUrls) {
261 NavigateAndCommit(kTestPageUrl);
262 // Triggers snapshot after a time delay.
263 recent_tab_helper()->DocumentAvailableInMainFrame();
264 RunUntilIdle();
265 EXPECT_TRUE(model()->is_loaded());
266 EXPECT_EQ(0U, model_changed_count());
267 // Move the snapshot controller's time forward so it gets past timeouts.
268 FastForwardSnapshotController();
269 RunUntilIdle();
270 EXPECT_EQ(1U, model_changed_count());
271 EXPECT_EQ(0U, model_removed_count());
272 GetAllPages();
273 EXPECT_EQ(1U, all_pages().size());
274 EXPECT_EQ(kTestPageUrl, all_pages()[0].url);
275
276 NavigateAndCommit(kTestPageUrlOther);
277 // Triggers snapshot immediately;
278 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
279 RunUntilIdle();
280 EXPECT_EQ(2U, model_changed_count());
281 EXPECT_EQ(1U, model_removed_count());
282 // the same page should be simply overridden.
283 GetAllPages();
284 EXPECT_EQ(1U, all_pages().size());
285 EXPECT_EQ(kTestPageUrlOther, all_pages()[0].url);
286 }
287
211 TEST_F(RecentTabHelperTest, NoCaptureOnErrorPage) { 288 TEST_F(RecentTabHelperTest, NoCaptureOnErrorPage) {
212 FailLoad(kTestPageUrl); 289 FailLoad(kTestPageUrl);
213 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame(); 290 recent_tab_helper()->DocumentOnLoadCompletedInMainFrame();
214 RunUntilIdle(); 291 RunUntilIdle();
215 EXPECT_TRUE(model()->is_loaded()); 292 EXPECT_TRUE(model()->is_loaded());
216 GetAllPages(); 293 GetAllPages();
217 EXPECT_EQ(0U, all_pages().size()); 294 EXPECT_EQ(0U, all_pages().size());
218 } 295 }
219 296
220 } // namespace offline_pages 297 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698