Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 | |
| OLD | NEW |