OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/memory/weak_ptr.h" | 5 #include "base/memory/weak_ptr.h" |
6 #include "base/path_service.h" | 6 #include "base/path_service.h" |
7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "components/dom_distiller/content/distiller_page_web_contents.h" | 9 #include "components/dom_distiller/content/distiller_page_web_contents.h" |
10 #include "components/dom_distiller/content/web_contents_main_frame_observer.h" | 10 #include "components/dom_distiller/content/web_contents_main_frame_observer.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 base::Closure quit_closure_; | 82 base::Closure quit_closure_; |
83 scoped_ptr<DistilledPageInfo> page_info_; | 83 scoped_ptr<DistilledPageInfo> page_info_; |
84 }; | 84 }; |
85 | 85 |
86 // Use this class to be able to leak the WebContents, which is needed for when | 86 // Use this class to be able to leak the WebContents, which is needed for when |
87 // the current WebContents is used for distillation. | 87 // the current WebContents is used for distillation. |
88 class TestDistillerPageWebContents : public DistillerPageWebContents { | 88 class TestDistillerPageWebContents : public DistillerPageWebContents { |
89 public: | 89 public: |
90 TestDistillerPageWebContents( | 90 TestDistillerPageWebContents( |
91 content::BrowserContext* browser_context, | 91 content::BrowserContext* browser_context, |
| 92 const gfx::Size& render_view_size, |
92 scoped_ptr<SourcePageHandleWebContents> optional_web_contents_handle, | 93 scoped_ptr<SourcePageHandleWebContents> optional_web_contents_handle, |
93 bool expect_new_web_contents) | 94 bool expect_new_web_contents) |
94 : DistillerPageWebContents(browser_context, | 95 : DistillerPageWebContents(browser_context, render_view_size, |
95 optional_web_contents_handle.Pass()), | 96 optional_web_contents_handle.Pass()), |
96 expect_new_web_contents_(expect_new_web_contents), | 97 expect_new_web_contents_(expect_new_web_contents), |
97 new_web_contents_created_(false) {} | 98 new_web_contents_created_(false) {} |
98 | 99 |
99 virtual void CreateNewWebContents(const GURL& url) OVERRIDE { | 100 virtual void CreateNewWebContents(const GURL& url) OVERRIDE { |
100 ASSERT_EQ(true, expect_new_web_contents_); | 101 ASSERT_EQ(true, expect_new_web_contents_); |
101 new_web_contents_created_ = true; | 102 new_web_contents_created_ = true; |
102 // DistillerPageWebContents::CreateNewWebContents resets the scoped_ptr to | 103 // DistillerPageWebContents::CreateNewWebContents resets the scoped_ptr to |
103 // the WebContents, so intentionally leak WebContents here, since it is | 104 // the WebContents, so intentionally leak WebContents here, since it is |
104 // owned by the shell. | 105 // owned by the shell. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 } | 155 } |
155 | 156 |
156 private: | 157 private: |
157 base::Closure callback_; | 158 base::Closure callback_; |
158 bool wait_for_document_loaded_; | 159 bool wait_for_document_loaded_; |
159 }; | 160 }; |
160 | 161 |
161 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, BasicDistillationWorks) { | 162 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, BasicDistillationWorks) { |
162 DistillerPageWebContents distiller_page( | 163 DistillerPageWebContents distiller_page( |
163 shell()->web_contents()->GetBrowserContext(), | 164 shell()->web_contents()->GetBrowserContext(), |
| 165 shell()->web_contents()->GetContainerBounds().size(), |
164 scoped_ptr<SourcePageHandleWebContents>()); | 166 scoped_ptr<SourcePageHandleWebContents>()); |
165 distiller_page_ = &distiller_page; | 167 distiller_page_ = &distiller_page; |
166 | 168 |
167 base::RunLoop run_loop; | 169 base::RunLoop run_loop; |
168 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); | 170 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); |
169 run_loop.Run(); | 171 run_loop.Run(); |
170 | 172 |
171 EXPECT_EQ("Test Page Title", page_info_.get()->title); | 173 EXPECT_EQ("Test Page Title", page_info_.get()->title); |
172 EXPECT_THAT(page_info_.get()->html, HasSubstr("Lorem ipsum")); | 174 EXPECT_THAT(page_info_.get()->html, HasSubstr("Lorem ipsum")); |
173 EXPECT_THAT(page_info_.get()->html, Not(HasSubstr("questionable content"))); | 175 EXPECT_THAT(page_info_.get()->html, Not(HasSubstr("questionable content"))); |
174 EXPECT_EQ("", page_info_.get()->next_page_url); | 176 EXPECT_EQ("", page_info_.get()->next_page_url); |
175 EXPECT_EQ("", page_info_.get()->prev_page_url); | 177 EXPECT_EQ("", page_info_.get()->prev_page_url); |
176 } | 178 } |
177 | 179 |
178 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, HandlesRelativeLinks) { | 180 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, HandlesRelativeLinks) { |
179 DistillerPageWebContents distiller_page( | 181 DistillerPageWebContents distiller_page( |
180 shell()->web_contents()->GetBrowserContext(), | 182 shell()->web_contents()->GetBrowserContext(), |
| 183 shell()->web_contents()->GetContainerBounds().size(), |
181 scoped_ptr<SourcePageHandleWebContents>()); | 184 scoped_ptr<SourcePageHandleWebContents>()); |
182 distiller_page_ = &distiller_page; | 185 distiller_page_ = &distiller_page; |
183 | 186 |
184 base::RunLoop run_loop; | 187 base::RunLoop run_loop; |
185 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); | 188 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); |
186 run_loop.Run(); | 189 run_loop.Run(); |
187 | 190 |
188 // A relative link should've been updated. | 191 // A relative link should've been updated. |
189 EXPECT_THAT(page_info_.get()->html, | 192 EXPECT_THAT(page_info_.get()->html, |
190 ContainsRegex("href=\"http://127.0.0.1:.*/relativelink.html\"")); | 193 ContainsRegex("href=\"http://127.0.0.1:.*/relativelink.html\"")); |
191 EXPECT_THAT(page_info_.get()->html, | 194 EXPECT_THAT(page_info_.get()->html, |
192 HasSubstr("href=\"http://www.google.com/absolutelink.html\"")); | 195 HasSubstr("href=\"http://www.google.com/absolutelink.html\"")); |
193 } | 196 } |
194 | 197 |
195 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, HandlesRelativeImages) { | 198 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, HandlesRelativeImages) { |
196 DistillerPageWebContents distiller_page( | 199 DistillerPageWebContents distiller_page( |
197 shell()->web_contents()->GetBrowserContext(), | 200 shell()->web_contents()->GetBrowserContext(), |
| 201 shell()->web_contents()->GetContainerBounds().size(), |
198 scoped_ptr<SourcePageHandleWebContents>()); | 202 scoped_ptr<SourcePageHandleWebContents>()); |
199 distiller_page_ = &distiller_page; | 203 distiller_page_ = &distiller_page; |
200 | 204 |
201 base::RunLoop run_loop; | 205 base::RunLoop run_loop; |
202 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); | 206 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); |
203 run_loop.Run(); | 207 run_loop.Run(); |
204 | 208 |
205 // A relative link should've been updated. | 209 // A relative link should've been updated. |
206 EXPECT_THAT(page_info_.get()->html, | 210 EXPECT_THAT(page_info_.get()->html, |
207 ContainsRegex("src=\"http://127.0.0.1:.*/relativeimage.png\"")); | 211 ContainsRegex("src=\"http://127.0.0.1:.*/relativeimage.png\"")); |
208 EXPECT_THAT(page_info_.get()->html, | 212 EXPECT_THAT(page_info_.get()->html, |
209 HasSubstr("src=\"http://www.google.com/absoluteimage.png\"")); | 213 HasSubstr("src=\"http://www.google.com/absoluteimage.png\"")); |
210 } | 214 } |
211 | 215 |
212 | 216 |
213 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, HandlesRelativeVideos) { | 217 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, HandlesRelativeVideos) { |
214 DistillerPageWebContents distiller_page( | 218 DistillerPageWebContents distiller_page( |
215 shell()->web_contents()->GetBrowserContext(), | 219 shell()->web_contents()->GetBrowserContext(), |
| 220 shell()->web_contents()->GetContainerBounds().size(), |
216 scoped_ptr<SourcePageHandleWebContents>()); | 221 scoped_ptr<SourcePageHandleWebContents>()); |
217 distiller_page_ = &distiller_page; | 222 distiller_page_ = &distiller_page; |
218 | 223 |
219 base::RunLoop run_loop; | 224 base::RunLoop run_loop; |
220 DistillPage(run_loop.QuitClosure(), kVideoArticlePath); | 225 DistillPage(run_loop.QuitClosure(), kVideoArticlePath); |
221 run_loop.Run(); | 226 run_loop.Run(); |
222 | 227 |
223 // A relative source/track should've been updated. | 228 // A relative source/track should've been updated. |
224 EXPECT_THAT( | 229 EXPECT_THAT( |
225 page_info_.get()->html, | 230 page_info_.get()->html, |
226 ContainsRegex("src=\"http://127.0.0.1:.*/relative_video.mp4\"")); | 231 ContainsRegex("src=\"http://127.0.0.1:.*/relative_video.mp4\"")); |
227 EXPECT_THAT( | 232 EXPECT_THAT( |
228 page_info_.get()->html, | 233 page_info_.get()->html, |
229 ContainsRegex("src=\"http://127.0.0.1:.*/relative_track_en.vtt\"")); | 234 ContainsRegex("src=\"http://127.0.0.1:.*/relative_track_en.vtt\"")); |
230 EXPECT_THAT( | 235 EXPECT_THAT( |
231 page_info_.get()->html, | 236 page_info_.get()->html, |
232 HasSubstr("src=\"http://www.google.com/absolute_video.ogg\"")); | 237 HasSubstr("src=\"http://www.google.com/absolute_video.ogg\"")); |
233 EXPECT_THAT( | 238 EXPECT_THAT( |
234 page_info_.get()->html, | 239 page_info_.get()->html, |
235 HasSubstr("src=\"http://www.google.com/absolute_track_fr.vtt\"")); | 240 HasSubstr("src=\"http://www.google.com/absolute_track_fr.vtt\"")); |
236 } | 241 } |
237 | 242 |
238 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, VisibilityDetection) { | 243 IN_PROC_BROWSER_TEST_F(DistillerPageWebContentsTest, VisibilityDetection) { |
239 DistillerPageWebContents distiller_page( | 244 DistillerPageWebContents distiller_page( |
240 shell()->web_contents()->GetBrowserContext(), | 245 shell()->web_contents()->GetBrowserContext(), |
| 246 shell()->web_contents()->GetContainerBounds().size(), |
241 scoped_ptr<SourcePageHandleWebContents>()); | 247 scoped_ptr<SourcePageHandleWebContents>()); |
242 distiller_page_ = &distiller_page; | 248 distiller_page_ = &distiller_page; |
243 | 249 |
244 // visble_style.html and invisible_style.html only differ by the visibility | 250 // visble_style.html and invisible_style.html only differ by the visibility |
245 // internal stylesheet. | 251 // internal stylesheet. |
246 | 252 |
247 { | 253 { |
248 base::RunLoop run_loop; | 254 base::RunLoop run_loop; |
249 DistillPage(run_loop.QuitClosure(), "/visible_style.html"); | 255 DistillPage(run_loop.QuitClosure(), "/visible_style.html"); |
250 run_loop.Run(); | 256 run_loop.Run(); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 content::PAGE_TRANSITION_TYPED, | 333 content::PAGE_TRANSITION_TYPED, |
328 std::string()); | 334 std::string()); |
329 url_loaded_runner.Run(); | 335 url_loaded_runner.Run(); |
330 | 336 |
331 scoped_ptr<content::WebContents> old_web_contents_sptr(current_web_contents); | 337 scoped_ptr<content::WebContents> old_web_contents_sptr(current_web_contents); |
332 scoped_ptr<SourcePageHandleWebContents> source_page_handle( | 338 scoped_ptr<SourcePageHandleWebContents> source_page_handle( |
333 new SourcePageHandleWebContents(old_web_contents_sptr.Pass())); | 339 new SourcePageHandleWebContents(old_web_contents_sptr.Pass())); |
334 | 340 |
335 TestDistillerPageWebContents distiller_page( | 341 TestDistillerPageWebContents distiller_page( |
336 shell()->web_contents()->GetBrowserContext(), | 342 shell()->web_contents()->GetBrowserContext(), |
| 343 shell()->web_contents()->GetContainerBounds().size(), |
337 source_page_handle.Pass(), | 344 source_page_handle.Pass(), |
338 expect_new_web_contents); | 345 expect_new_web_contents); |
339 distiller_page_ = &distiller_page; | 346 distiller_page_ = &distiller_page; |
340 | 347 |
341 base::RunLoop run_loop; | 348 base::RunLoop run_loop; |
342 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); | 349 DistillPage(run_loop.QuitClosure(), kSimpleArticlePath); |
343 run_loop.Run(); | 350 run_loop.Run(); |
344 | 351 |
345 // Sanity check of distillation process. | 352 // Sanity check of distillation process. |
346 EXPECT_EQ(expect_new_web_contents, distiller_page.new_web_contents_created()); | 353 EXPECT_EQ(expect_new_web_contents, distiller_page.new_web_contents_created()); |
347 EXPECT_EQ("Test Page Title", page_info_.get()->title); | 354 EXPECT_EQ("Test Page Title", page_info_.get()->title); |
348 } | 355 } |
349 | 356 |
350 } // namespace dom_distiller | 357 } // namespace dom_distiller |
OLD | NEW |