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

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