| OLD | NEW | 
|---|
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ | 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ | 
| 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ | 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ | 
| 7 | 7 | 
| 8 #include <deque> | 8 #include <deque> | 
| 9 #include <functional> | 9 #include <functional> | 
| 10 #include <memory> | 10 #include <memory> | 
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 137   // Set to true when the prerendering RenderWidget is hidden. | 137   // Set to true when the prerendering RenderWidget is hidden. | 
| 138   bool was_hidden_; | 138   bool was_hidden_; | 
| 139   // Set to true when the prerendering RenderWidget is shown, after having been | 139   // Set to true when the prerendering RenderWidget is shown, after having been | 
| 140   // hidden. | 140   // hidden. | 
| 141   bool was_shown_; | 141   bool was_shown_; | 
| 142   // Expected final value of was_shown_.  Defaults to true for | 142   // Expected final value of was_shown_.  Defaults to true for | 
| 143   // FINAL_STATUS_USED, and false otherwise. | 143   // FINAL_STATUS_USED, and false otherwise. | 
| 144   bool should_be_shown_; | 144   bool should_be_shown_; | 
| 145   // If true, |expected_final_status_| and other shutdown checks are skipped. | 145   // If true, |expected_final_status_| and other shutdown checks are skipped. | 
| 146   bool skip_final_checks_; | 146   bool skip_final_checks_; | 
|  | 147 | 
|  | 148   DISALLOW_COPY_AND_ASSIGN(TestPrerenderContents); | 
| 147 }; | 149 }; | 
| 148 | 150 | 
| 149 // A handle to a TestPrerenderContents whose lifetime is under the caller's | 151 // A handle to a TestPrerenderContents whose lifetime is under the caller's | 
| 150 // control. A PrerenderContents may be destroyed at any point. This allows | 152 // control. A PrerenderContents may be destroyed at any point. This allows | 
| 151 // tracking the final status, etc. | 153 // tracking the FinalStatus. | 
| 152 class TestPrerender : public PrerenderContents::Observer, | 154 class TestPrerender : public PrerenderContents::Observer, | 
| 153                       public base::SupportsWeakPtr<TestPrerender> { | 155                       public base::SupportsWeakPtr<TestPrerender> { | 
| 154  public: | 156  public: | 
| 155   TestPrerender(); | 157   TestPrerender(); | 
| 156   ~TestPrerender() override; | 158   ~TestPrerender() override; | 
| 157 | 159 | 
| 158   TestPrerenderContents* contents() const { return contents_; } | 160   TestPrerenderContents* contents() const { return contents_; } | 
| 159   int number_of_loads() const { return number_of_loads_; } | 161   int number_of_loads() const { return number_of_loads_; } | 
|  | 162   FinalStatus GetFinalStatus() const; | 
| 160 | 163 | 
| 161   void WaitForCreate(); | 164   void WaitForCreate(); | 
| 162   void WaitForStart(); | 165   void WaitForStart(); | 
| 163   void WaitForStop(); | 166   void WaitForStop(); | 
| 164 | 167 | 
| 165   // Waits for |number_of_loads()| to be at least |expected_number_of_loads| OR | 168   // Waits for |number_of_loads()| to be at least |expected_number_of_loads| OR | 
| 166   // for the prerender to stop running (just to avoid a timeout if the prerender | 169   // for the prerender to stop running (just to avoid a timeout if the prerender | 
| 167   // dies). Note: this does not assert equality on the number of loads; the | 170   // dies). Note: this does not assert equality on the number of loads; the | 
| 168   // caller must do it instead. | 171   // caller must do it instead. | 
| 169   void WaitForLoads(int expected_number_of_loads); | 172   void WaitForLoads(int expected_number_of_loads); | 
| 170 | 173 | 
| 171   void OnPrerenderCreated(TestPrerenderContents* contents); | 174   void OnPrerenderCreated(TestPrerenderContents* contents); | 
| 172 | 175 | 
| 173   // PrerenderContents::Observer implementation: | 176   // PrerenderContents::Observer implementation: | 
| 174   void OnPrerenderStart(PrerenderContents* contents) override; | 177   void OnPrerenderStart(PrerenderContents* contents) override; | 
| 175 | 178 | 
| 176   void OnPrerenderStopLoading(PrerenderContents* contents) override; | 179   void OnPrerenderStopLoading(PrerenderContents* contents) override; | 
| 177 | 180 | 
| 178   void OnPrerenderStop(PrerenderContents* contents) override; | 181   void OnPrerenderStop(PrerenderContents* contents) override; | 
| 179 | 182 | 
| 180  private: | 183  private: | 
| 181   TestPrerenderContents* contents_; | 184   TestPrerenderContents* contents_; | 
|  | 185   FinalStatus final_status_; | 
| 182   int number_of_loads_; | 186   int number_of_loads_; | 
| 183 | 187 | 
| 184   int expected_number_of_loads_; | 188   int expected_number_of_loads_; | 
| 185   std::unique_ptr<base::RunLoop> load_waiter_; | 189   std::unique_ptr<base::RunLoop> load_waiter_; | 
| 186 | 190 | 
| 187   bool started_; | 191   bool started_; | 
| 188   bool stopped_; | 192   bool stopped_; | 
| 189 | 193 | 
| 190   base::RunLoop create_loop_; | 194   base::RunLoop create_loop_; | 
| 191   base::RunLoop start_loop_; | 195   base::RunLoop start_loop_; | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 216    public: | 220    public: | 
| 217     // Does not own the waiter which must outlive the TestPrerenderContents. | 221     // Does not own the waiter which must outlive the TestPrerenderContents. | 
| 218     explicit DestructionMarker(DestructionWaiter* waiter); | 222     explicit DestructionMarker(DestructionWaiter* waiter); | 
| 219 | 223 | 
| 220     ~DestructionMarker() override; | 224     ~DestructionMarker() override; | 
| 221 | 225 | 
| 222     void OnPrerenderStop(PrerenderContents* contents) override; | 226     void OnPrerenderStop(PrerenderContents* contents) override; | 
| 223 | 227 | 
| 224    private: | 228    private: | 
| 225     DestructionWaiter* waiter_; | 229     DestructionWaiter* waiter_; | 
|  | 230 | 
|  | 231     DISALLOW_COPY_AND_ASSIGN(DestructionMarker); | 
| 226   }; | 232   }; | 
| 227 | 233 | 
| 228   // To be called by a DestructionMarker. | 234   // To be called by a DestructionMarker. | 
| 229   void MarkDestruction(FinalStatus reason); | 235   void MarkDestruction(FinalStatus reason); | 
| 230 | 236 | 
| 231   base::RunLoop wait_loop_; | 237   base::RunLoop wait_loop_; | 
| 232   FinalStatus expected_final_status_; | 238   FinalStatus expected_final_status_; | 
| 233   bool saw_correct_status_; | 239   bool saw_correct_status_; | 
| 234   std::unique_ptr<DestructionMarker> marker_; | 240   std::unique_ptr<DestructionMarker> marker_; | 
|  | 241 | 
|  | 242   DISALLOW_COPY_AND_ASSIGN(DestructionWaiter); | 
| 235 }; | 243 }; | 
| 236 | 244 | 
| 237 // PrerenderContentsFactory that uses TestPrerenderContents. | 245 // PrerenderContentsFactory that uses TestPrerenderContents. | 
| 238 class TestPrerenderContentsFactory : public PrerenderContents::Factory { | 246 class TestPrerenderContentsFactory : public PrerenderContents::Factory { | 
| 239  public: | 247  public: | 
| 240   TestPrerenderContentsFactory(); | 248   TestPrerenderContentsFactory(); | 
| 241 | 249 | 
| 242   ~TestPrerenderContentsFactory() override; | 250   ~TestPrerenderContentsFactory() override; | 
| 243 | 251 | 
| 244   std::unique_ptr<TestPrerender> ExpectPrerenderContents( | 252   std::unique_ptr<TestPrerender> ExpectPrerenderContents( | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 257     ExpectedContents(const ExpectedContents& other); | 265     ExpectedContents(const ExpectedContents& other); | 
| 258     ExpectedContents(FinalStatus final_status, | 266     ExpectedContents(FinalStatus final_status, | 
| 259                      const base::WeakPtr<TestPrerender>& handle); | 267                      const base::WeakPtr<TestPrerender>& handle); | 
| 260     ~ExpectedContents(); | 268     ~ExpectedContents(); | 
| 261 | 269 | 
| 262     FinalStatus final_status; | 270     FinalStatus final_status; | 
| 263     base::WeakPtr<TestPrerender> handle; | 271     base::WeakPtr<TestPrerender> handle; | 
| 264   }; | 272   }; | 
| 265 | 273 | 
| 266   std::deque<ExpectedContents> expected_contents_queue_; | 274   std::deque<ExpectedContents> expected_contents_queue_; | 
|  | 275 | 
|  | 276   DISALLOW_COPY_AND_ASSIGN(TestPrerenderContentsFactory); | 
| 267 }; | 277 }; | 
| 268 | 278 | 
| 269 class PrerenderInProcessBrowserTest : virtual public InProcessBrowserTest { | 279 class PrerenderInProcessBrowserTest : virtual public InProcessBrowserTest { | 
| 270  public: | 280  public: | 
| 271   PrerenderInProcessBrowserTest(); | 281   PrerenderInProcessBrowserTest(); | 
| 272 | 282 | 
| 273   ~PrerenderInProcessBrowserTest() override; | 283   ~PrerenderInProcessBrowserTest() override; | 
| 274 | 284 | 
| 275   void SetUpCommandLine(base::CommandLine* command_line) override; | 285   void SetUpCommandLine(base::CommandLine* command_line) override; | 
| 276   void SetUpInProcessBrowserTestFixture() override; | 286   void SetUpInProcessBrowserTestFixture() override; | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 287   bool UrlIsInPrerenderManager(const GURL& url) const; | 297   bool UrlIsInPrerenderManager(const GURL& url) const; | 
| 288 | 298 | 
| 289   // Convenience function to get the currently active WebContents in | 299   // Convenience function to get the currently active WebContents in | 
| 290   // current_browser(). | 300   // current_browser(). | 
| 291   content::WebContents* GetActiveWebContents() const; | 301   content::WebContents* GetActiveWebContents() const; | 
| 292 | 302 | 
| 293   PrerenderManager* GetPrerenderManager() const; | 303   PrerenderManager* GetPrerenderManager() const; | 
| 294 | 304 | 
| 295   TestPrerenderContents* GetPrerenderContentsFor(const GURL& url) const; | 305   TestPrerenderContents* GetPrerenderContentsFor(const GURL& url) const; | 
| 296 | 306 | 
| 297   std::unique_ptr<TestPrerender> PrerenderTestURL( |  | 
| 298       const std::string& html_file, |  | 
| 299       FinalStatus expected_final_status, |  | 
| 300       int expected_number_of_loads); |  | 
| 301 |  | 
| 302   std::unique_ptr<TestPrerender> PrerenderTestURL( |  | 
| 303       const GURL& url, |  | 
| 304       FinalStatus expected_final_status, |  | 
| 305       int expected_number_of_loads); |  | 
| 306 |  | 
| 307   std::vector<std::unique_ptr<TestPrerender>> PrerenderTestURL( |  | 
| 308       const std::string& html_file, |  | 
| 309       const std::vector<FinalStatus>& expected_final_status_queue, |  | 
| 310       int expected_number_of_loads); |  | 
| 311 |  | 
| 312   // Set up an HTTPS server. | 307   // Set up an HTTPS server. | 
| 313   void UseHttpsSrcServer(); | 308   void UseHttpsSrcServer(); | 
| 314 | 309 | 
| 315   // Returns the currently active server. See |UseHttpsSrcServer|. | 310   // Returns the currently active server. See |UseHttpsSrcServer|. | 
| 316   net::EmbeddedTestServer* src_server(); | 311   net::EmbeddedTestServer* src_server(); | 
| 317 | 312 | 
| 318   safe_browsing::TestSafeBrowsingServiceFactory* safe_browsing_factory() const { | 313   safe_browsing::TestSafeBrowsingServiceFactory* safe_browsing_factory() const { | 
| 319     return safe_browsing_factory_.get(); | 314     return safe_browsing_factory_.get(); | 
| 320   } | 315   } | 
| 321 | 316 | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 336 | 331 | 
| 337   const base::HistogramTester& histogram_tester() { return histogram_tester_; } | 332   const base::HistogramTester& histogram_tester() { return histogram_tester_; } | 
| 338 | 333 | 
| 339   // Returns a string for pattern-matching TaskManager tab entries. | 334   // Returns a string for pattern-matching TaskManager tab entries. | 
| 340   base::string16 MatchTaskManagerTab(const char* page_title); | 335   base::string16 MatchTaskManagerTab(const char* page_title); | 
| 341 | 336 | 
| 342   // Returns a string for pattern-matching TaskManager prerender entries. | 337   // Returns a string for pattern-matching TaskManager prerender entries. | 
| 343   base::string16 MatchTaskManagerPrerender(const char* page_title); | 338   base::string16 MatchTaskManagerPrerender(const char* page_title); | 
| 344 | 339 | 
| 345  protected: | 340  protected: | 
| 346   // To be called from PrerenderTestUrlImpl. Sets up the appropraite prerenders, | 341   // For each FinalStatus in |expected_final_status_queue| creates a prerender | 
| 347   // checking for the expected final status, navigates to the loader url, and | 342   // that is going to verify the correctness of its FinalStatus upon | 
| 348   // waits for the load. | 343   // destruction. Waits for creation of the first PrerenderContents. | 
| 349   std::vector<std::unique_ptr<TestPrerender>> NavigateWithPrerenders( | 344   std::vector<std::unique_ptr<TestPrerender>> NavigateWithPrerenders( | 
| 350       const GURL& loader_url, | 345       const GURL& loader_url, | 
| 351       const std::vector<FinalStatus>& expected_final_status_queue, | 346       const std::vector<FinalStatus>& expected_final_status_queue); | 
| 352       int expected_number_of_loads); | 347 | 
|  | 348   // Creates the URL that instructs the test server to substitute the text | 
|  | 349   // |replacement_variable| in the contents of the file pointed to by | 
|  | 350   // |loader_path| with |url_to_prerender|. Also appends the |loader_query| to | 
|  | 351   // the URL. | 
|  | 352   GURL ServeLoaderURL(const std::string& loader_path, | 
|  | 353                       const std::string& replacement_variable, | 
|  | 354                       const GURL& url_to_prerender, | 
|  | 355                       const std::string& loader_query); | 
| 353 | 356 | 
| 354  private: | 357  private: | 
| 355   // Implement load of a url for a prerender test. prerender_url should be |  | 
| 356   // loaded, and we should expect to see one prerenderer created, and exit, for |  | 
| 357   // each entry in expected_final_status_queue, and seeing |  | 
| 358   // expected_number_of_loads. Specific tests can provide additional |  | 
| 359   // verification. Note this should be called by one of the convenience wrappers |  | 
| 360   // defined above. |  | 
| 361   virtual std::vector<std::unique_ptr<TestPrerender>> PrerenderTestURLImpl( |  | 
| 362       const GURL& prerender_url, |  | 
| 363       const std::vector<FinalStatus>& expected_final_status_queue, |  | 
| 364       int expected_number_of_loads) = 0; |  | 
| 365 |  | 
| 366   std::unique_ptr<ExternalProtocolHandler::Delegate> | 358   std::unique_ptr<ExternalProtocolHandler::Delegate> | 
| 367       external_protocol_handler_delegate_; | 359       external_protocol_handler_delegate_; | 
| 368   std::unique_ptr<safe_browsing::TestSafeBrowsingServiceFactory> | 360   std::unique_ptr<safe_browsing::TestSafeBrowsingServiceFactory> | 
| 369       safe_browsing_factory_; | 361       safe_browsing_factory_; | 
| 370   TestPrerenderContentsFactory* prerender_contents_factory_; | 362   TestPrerenderContentsFactory* prerender_contents_factory_; | 
| 371   Browser* explicitly_set_browser_; | 363   Browser* explicitly_set_browser_; | 
| 372   bool autostart_test_server_; | 364   bool autostart_test_server_; | 
| 373   base::HistogramTester histogram_tester_; | 365   base::HistogramTester histogram_tester_; | 
| 374   std::unique_ptr<net::EmbeddedTestServer> https_src_server_; | 366   std::unique_ptr<net::EmbeddedTestServer> https_src_server_; | 
|  | 367 | 
|  | 368   DISALLOW_COPY_AND_ASSIGN(PrerenderInProcessBrowserTest); | 
| 375 }; | 369 }; | 
| 376 | 370 | 
| 377 // Makes |url| respond to requests with the contents of |file|, counting the | 371 // Makes |url| respond to requests with the contents of |file|, counting the | 
| 378 // number that start in |counter|. | 372 // number that start in |counter|. | 
| 379 void CreateCountingInterceptorOnIO( | 373 void CreateCountingInterceptorOnIO( | 
| 380     const GURL& url, | 374     const GURL& url, | 
| 381     const base::FilePath& file, | 375     const base::FilePath& file, | 
| 382     const base::WeakPtr<RequestCounter>& counter); | 376     const base::WeakPtr<RequestCounter>& counter); | 
| 383 | 377 | 
| 384 // Makes |url| respond to requests with the contents of |file|. | 378 // Makes |url| respond to requests with the contents of |file|. | 
| 385 void CreateMockInterceptorOnIO(const GURL& url, const base::FilePath& file); | 379 void CreateMockInterceptorOnIO(const GURL& url, const base::FilePath& file); | 
| 386 | 380 | 
| 387 }  // namespace test_utils | 381 }  // namespace test_utils | 
| 388 | 382 | 
| 389 }  // namespace prerender | 383 }  // namespace prerender | 
| 390 | 384 | 
| 391 #endif  // CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ | 385 #endif  // CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ | 
| OLD | NEW | 
|---|