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

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: 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
(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/test/base/testing_profile.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/browser/web_contents.h"
10 #include "content/public/test/test_browser_thread_bundle.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace offline_pages {
14
15 class UnitTestPrerenderManager;
16
17 namespace {
18
19 class StubPrerenderContents : public prerender::PrerenderContents {
20 public:
21 StubPrerenderContents(UnitTestPrerenderManager* test_prerender_manager,
22 const GURL& url,
23 prerender::Origin origin);
24
25 ~StubPrerenderContents() override;
26
27 void StartPrerendering(
28 const gfx::Size& size,
29 content::SessionStorageNamespace* session_storage_namespace) override;
30 };
31
32 } // namespace
33
34 // Subclass of PrerenderManager for unit testing. This needs to be a friend
35 // of PrerenderManager. Follows naming style used by prerender unittests (but
36 // is in offline_pages namespace).
37 class UnitTestPrerenderManager : public prerender::PrerenderManager {
Pete Williamson 2016/06/07 17:30:51 Instead of inheriting from the PrerenderManager, s
dougarnett 2016/06/11 00:21:55 Change to injecting PrerenderContentsFactory. [Bt
38 public:
39 explicit UnitTestPrerenderManager(Profile* profile)
40 : PrerenderManager(profile), create_prerender_contents_called_(false) {}
41
42 ~UnitTestPrerenderManager() override {}
43
44 bool create_prerender_contents_called() const {
45 return create_prerender_contents_called_;
46 }
47
48 private:
49 prerender::PrerenderContents* CreatePrerenderContents(
pasko 2016/06/07 11:33:00 or, alternatively, make this method protected. No
dougarnett 2016/06/07 16:45:39 Yes, making this protected is sufficient and seems
50 const GURL& url,
51 const content::Referrer& referrer,
52 prerender::Origin origin) override {
53 create_prerender_contents_called_ = true;
54 StubPrerenderContents* prerender_contents =
55 new StubPrerenderContents(this, url, prerender::ORIGIN_OFFLINE);
56 return prerender_contents;
57 }
58
59 bool create_prerender_contents_called_;
60 };
61
62 StubPrerenderContents::StubPrerenderContents(
63 UnitTestPrerenderManager* test_prerender_manager,
64 const GURL& url,
65 prerender::Origin origin)
66 : prerender::PrerenderContents(test_prerender_manager,
67 NULL,
68 url,
69 content::Referrer(),
70 origin) {}
71
72 StubPrerenderContents::~StubPrerenderContents() {}
73
74 void StubPrerenderContents::StartPrerendering(
75 const gfx::Size& size,
76 content::SessionStorageNamespace* session_storage_namespace) {
77 prerendering_has_started_ = true;
78 }
79
80 // Test class.
81 class PrerenderAdapterTest : public testing::Test,
82 public PrerenderAdapter::Observer {
83 public:
84 PrerenderAdapterTest();
85 ~PrerenderAdapterTest() override { unittest_prerender_manager_->Shutdown(); }
86
87 // PrerenderAdapter::Observer implementation:
88 void OnPrerenderStart() override;
89 void OnPrerenderStopLoading() override;
90 void OnPrerenderDomContentLoaded() override;
91 void OnPrerenderStop() override;
92
93 void SetUp() override;
94
95 // Returns the PrerenderLoader to test.
96 PrerenderAdapter* adapter() const { return adapter_.get(); }
97 UnitTestPrerenderManager* unittest_prerender_manager() {
98 return unittest_prerender_manager_.get();
99 }
100 Profile* profile() { return &profile_; }
101
102 private:
103 content::TestBrowserThreadBundle thread_bundle_;
104 TestingProfile profile_;
105 std::unique_ptr<PrerenderAdapter> adapter_;
106 std::unique_ptr<UnitTestPrerenderManager> unittest_prerender_manager_;
107 bool callback_called_;
108 // Offliner::RequestStatus callback_load_status_;
109
110 DISALLOW_COPY_AND_ASSIGN(PrerenderAdapterTest);
111 };
112
113 PrerenderAdapterTest::PrerenderAdapterTest()
114 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
115
116 void PrerenderAdapterTest::OnPrerenderStart() {}
117 void PrerenderAdapterTest::OnPrerenderStopLoading() {}
118 void PrerenderAdapterTest::OnPrerenderDomContentLoaded() {}
119 void PrerenderAdapterTest::OnPrerenderStop() {}
120
121 void PrerenderAdapterTest::SetUp() {
122 adapter_.reset(new PrerenderAdapter(this));
123 unittest_prerender_manager_.reset(new UnitTestPrerenderManager(profile()));
124 adapter()->SetPrerenderManagerForTest(unittest_prerender_manager());
125 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
126 }
127
128 TEST_F(PrerenderAdapterTest, CanPrerender) {
129 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
130 EXPECT_TRUE(adapter()->CanPrerender());
gabadie 2016/06/07 12:02:08 CanPrerender() { return true; } would pass the tes
dougarnett 2016/06/07 16:45:39 True - but really just wanted to exercise the dire
gabadie 2016/06/07 18:41:12 I think it would improve this CL. I think this sam
dougarnett 2016/06/11 00:21:55 Added CanPrerender == false test.
131 }
132
133 TEST_F(PrerenderAdapterTest, StartPrerenderFailsForUnsupportedScheme) {
134 content::WebContents* session_contents = content::WebContents::Create(
135 content::WebContents::CreateParams(profile()));
136 content::SessionStorageNamespace* sessionStorageNamespace =
137 session_contents->GetController().GetDefaultSessionStorageNamespace();
138 gfx::Size renderWindowSize = session_contents->GetContainerBounds().size();
139 GURL url("file://file.test");
140 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
141 EXPECT_FALSE(adapter()->StartPrerender(
142 profile(), url, sessionStorageNamespace, renderWindowSize));
143 EXPECT_TRUE(unittest_prerender_manager()->create_prerender_contents_called());
144 EXPECT_FALSE(adapter()->IsActive());
145 }
146
147 TEST_F(PrerenderAdapterTest, StartPrerenderSucceeds) {
148 content::WebContents* session_contents = content::WebContents::Create(
149 content::WebContents::CreateParams(profile()));
150 content::SessionStorageNamespace* sessionStorageNamespace =
151 session_contents->GetController().GetDefaultSessionStorageNamespace();
152 gfx::Size renderWindowSize = session_contents->GetContainerBounds().size();
153 GURL url("https://url.test");
154 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
155 EXPECT_TRUE(adapter()->StartPrerender(profile(), url, sessionStorageNamespace,
156 renderWindowSize));
157 EXPECT_TRUE(unittest_prerender_manager()->create_prerender_contents_called());
158 EXPECT_TRUE(adapter()->IsActive());
159
160 // Exercise access methods even though no interesting values set beneath.
161 EXPECT_EQ(nullptr, adapter()->GetWebContents());
162 EXPECT_EQ(prerender::FinalStatus::FINAL_STATUS_MAX,
163 adapter()->GetFinalStatus());
164
165 adapter()->DestroyActive();
166 EXPECT_FALSE(adapter()->IsActive());
167 }
168
169 // TODO(dougarnett): Test observer calls.
170
171 } // namespace offline_pages
OLDNEW
« no previous file with comments | « chrome/browser/android/offline_pages/prerender_adapter.cc ('k') | chrome/browser/prerender/prerender_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698