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

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

Issue 2044613003: Adds unit tests for offline_pages::PrerenderAdapter calling PrerenderManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated DCHECK to ASSERT 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 | « no previous file | chrome/browser/prerender/prerender_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/android/offline_pages/prerender_adapter.h"
6
7 #include "chrome/browser/prerender/prerender_manager_factory.h"
8 #include "chrome/test/base/testing_profile.h"
9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/web_contents.h"
11 #include "content/public/test/test_browser_thread_bundle.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 using prerender::FinalStatus;
15 using prerender::Origin;
16 using prerender::PrerenderContents;
17 using prerender::PrerenderManager;
18 using prerender::PrerenderManagerFactory;
19
20 namespace offline_pages {
21
22 namespace {
23
24 class StubPrerenderContents : public PrerenderContents {
25 public:
26 StubPrerenderContents(PrerenderManager* prerender_manager,
27 const GURL& url,
28 Origin origin);
29
30 ~StubPrerenderContents() override;
31
32 void StartPrerendering(
33 const gfx::Size& size,
34 content::SessionStorageNamespace* session_storage_namespace) override;
35
36 void ReportStartEvent() { NotifyPrerenderStart(); }
37 void ReportOnLoadEvent() { NotifyPrerenderStopLoading(); }
38 void ReportDomContentEvent() { NotifyPrerenderDomContentLoaded(); }
39 void StopWithStatus(FinalStatus final_status) { Destroy(final_status); }
40 };
41
42 StubPrerenderContents::StubPrerenderContents(
43 PrerenderManager* prerender_manager,
44 const GURL& url,
45 Origin origin)
46 : PrerenderContents(prerender_manager,
47 NULL,
48 url,
49 content::Referrer(),
50 origin) {}
51
52 StubPrerenderContents::~StubPrerenderContents() {}
53
54 void StubPrerenderContents::StartPrerendering(
55 const gfx::Size& size,
56 content::SessionStorageNamespace* session_storage_namespace) {
57 prerendering_has_started_ = true;
58 }
59
60 class StubPrerenderContentsFactory : public PrerenderContents::Factory {
61 public:
62 StubPrerenderContentsFactory()
63 : create_prerender_contents_called_(false),
64 last_prerender_contents_(nullptr) {}
65
66 ~StubPrerenderContentsFactory() override {}
67
68 PrerenderContents* CreatePrerenderContents(
69 PrerenderManager* prerender_manager,
70 Profile* profile,
71 const GURL& url,
72 const content::Referrer& referrer,
73 Origin origin) override;
74
75 bool create_prerender_contents_called() const {
76 return create_prerender_contents_called_;
77 }
78
79 StubPrerenderContents* last_prerender_contents() const {
80 return last_prerender_contents_;
81 }
82
83 private:
84 bool create_prerender_contents_called_;
85 StubPrerenderContents* last_prerender_contents_;
86
87 DISALLOW_COPY_AND_ASSIGN(StubPrerenderContentsFactory);
88 };
89
90 PrerenderContents* StubPrerenderContentsFactory::CreatePrerenderContents(
91 PrerenderManager* prerender_manager,
92 Profile* profile,
93 const GURL& url,
94 const content::Referrer& referrer,
95 Origin origin) {
96 create_prerender_contents_called_ = true;
97 last_prerender_contents_ = new StubPrerenderContents(
98 prerender_manager, url, prerender::ORIGIN_OFFLINE);
99 return last_prerender_contents_;
100 }
101
102 } // namespace
103
104 // Test class.
105 class PrerenderAdapterTest : public testing::Test,
106 public PrerenderAdapter::Observer {
107 public:
108 PrerenderAdapterTest();
109 ~PrerenderAdapterTest() override;
110
111 // PrerenderAdapter::Observer implementation:
112 void OnPrerenderStart() override;
113 void OnPrerenderStopLoading() override;
114 void OnPrerenderDomContentLoaded() override;
115 void OnPrerenderStop() override;
116
117 void SetUp() override;
118
119 // Returns the PrerenderLoader to test.
120 PrerenderAdapter* adapter() const { return adapter_.get(); }
121 StubPrerenderContentsFactory* prerender_contents_factory() {
122 return prerender_contents_factory_;
123 }
124 Profile* profile() { return &profile_; }
125 PrerenderManager* prerender_manager() { return prerender_manager_; }
126 bool observer_start_called() const { return observer_start_called_; }
127 bool observer_stop_loading_called() const {
128 return observer_stop_loading_called_;
129 }
130 bool observer_dom_content_loaded_called() const {
131 return observer_dom_content_loaded_called_;
132 }
133 bool observer_stop_called() const { return observer_stop_called_; }
134
135 private:
136 content::TestBrowserThreadBundle thread_bundle_;
137 TestingProfile profile_;
138 std::unique_ptr<PrerenderAdapter> adapter_;
139 StubPrerenderContentsFactory* prerender_contents_factory_;
140 PrerenderManager* prerender_manager_;
141 bool observer_start_called_;
142 bool observer_stop_loading_called_;
143 bool observer_dom_content_loaded_called_;
144 bool observer_stop_called_;
145
146 DISALLOW_COPY_AND_ASSIGN(PrerenderAdapterTest);
147 };
148
149 PrerenderAdapterTest::PrerenderAdapterTest()
150 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
151 prerender_manager_(nullptr),
152 observer_start_called_(false),
153 observer_stop_loading_called_(false),
154 observer_dom_content_loaded_called_(false),
155 observer_stop_called_(false) {}
156
157 void PrerenderAdapterTest::OnPrerenderStart() {
158 observer_start_called_ = true;
159 }
160
161 PrerenderAdapterTest::~PrerenderAdapterTest() {
162 prerender_manager_->Shutdown();
163 }
164
165 void PrerenderAdapterTest::OnPrerenderStopLoading() {
166 observer_stop_loading_called_ = true;
167 }
168
169 void PrerenderAdapterTest::OnPrerenderDomContentLoaded() {
170 observer_dom_content_loaded_called_ = true;
171 }
172
173 void PrerenderAdapterTest::OnPrerenderStop() {
174 observer_stop_called_ = true;
175 }
176
177 void PrerenderAdapterTest::SetUp() {
178 adapter_.reset(new PrerenderAdapter(this));
179 prerender_contents_factory_ = new StubPrerenderContentsFactory();
180 prerender_manager_ = PrerenderManagerFactory::GetForProfile(profile());
181 prerender_manager_->SetPrerenderContentsFactoryForTest(
182 prerender_contents_factory_);
183 prerender_manager_->SetMode(PrerenderManager::PRERENDER_MODE_ENABLED);
184 observer_start_called_ = false;
185 observer_stop_loading_called_ = false;
186 observer_dom_content_loaded_called_ = false;
187 observer_stop_called_ = false;
188 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
189 }
190
191 TEST_F(PrerenderAdapterTest, CanPrerender) {
192 EXPECT_TRUE(adapter()->CanPrerender());
193
194 prerender_manager()->SetMode(PrerenderManager::PRERENDER_MODE_DISABLED);
195 EXPECT_FALSE(adapter()->CanPrerender());
196 }
197
198 TEST_F(PrerenderAdapterTest, StartPrerenderFailsForUnsupportedScheme) {
199 content::WebContents* session_contents = content::WebContents::Create(
200 content::WebContents::CreateParams(profile()));
201 content::SessionStorageNamespace* sessionStorageNamespace =
202 session_contents->GetController().GetDefaultSessionStorageNamespace();
203 gfx::Size renderWindowSize = session_contents->GetContainerBounds().size();
204 GURL url("file://file.test");
205 EXPECT_FALSE(adapter()->StartPrerender(
206 profile(), url, sessionStorageNamespace, renderWindowSize));
207 EXPECT_TRUE(prerender_contents_factory()->create_prerender_contents_called());
208 EXPECT_FALSE(adapter()->IsActive());
209 }
210
211 TEST_F(PrerenderAdapterTest, StartPrerenderSucceeds) {
212 content::WebContents* session_contents = content::WebContents::Create(
213 content::WebContents::CreateParams(profile()));
214 content::SessionStorageNamespace* sessionStorageNamespace =
215 session_contents->GetController().GetDefaultSessionStorageNamespace();
216 gfx::Size renderWindowSize = session_contents->GetContainerBounds().size();
217 GURL url("https://url.test");
218 EXPECT_TRUE(adapter()->StartPrerender(profile(), url, sessionStorageNamespace,
219 renderWindowSize));
220 EXPECT_TRUE(prerender_contents_factory()->create_prerender_contents_called());
221 EXPECT_NE(nullptr, prerender_contents_factory()->last_prerender_contents());
222 EXPECT_TRUE(adapter()->IsActive());
223 EXPECT_FALSE(observer_start_called());
224 EXPECT_FALSE(observer_stop_loading_called());
225 EXPECT_FALSE(observer_dom_content_loaded_called());
226 EXPECT_FALSE(observer_stop_called());
227
228 // Exercise observer event call paths.
229 prerender_contents_factory()->last_prerender_contents()->ReportStartEvent();
230 // PumpLoop();
231 EXPECT_TRUE(observer_start_called());
232 prerender_contents_factory()
233 ->last_prerender_contents()
234 ->ReportDomContentEvent();
235 EXPECT_TRUE(observer_dom_content_loaded_called());
236 prerender_contents_factory()->last_prerender_contents()->ReportOnLoadEvent();
237 EXPECT_TRUE(observer_stop_loading_called());
238 prerender_contents_factory()->last_prerender_contents()->StopWithStatus(
239 FinalStatus::FINAL_STATUS_CANCELLED);
240 EXPECT_TRUE(observer_stop_called());
241 EXPECT_EQ(FinalStatus::FINAL_STATUS_CANCELLED, adapter()->GetFinalStatus());
242
243 // Exercise access methods even though no interesting values set beneath.
244 EXPECT_EQ(nullptr, adapter()->GetWebContents());
245
246 adapter()->DestroyActive();
247 EXPECT_FALSE(adapter()->IsActive());
248 }
249
250 } // namespace offline_pages
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698