Chromium Code Reviews| Index: chrome/browser/prerender/prerender_test_utils.h |
| diff --git a/chrome/browser/prerender/prerender_test_utils.h b/chrome/browser/prerender/prerender_test_utils.h |
| index 280cde00336ed448eb263eb1673394b9a3cd5ab7..82f5e4b576c06d7b027a0157d2461ba8eb03cdae 100644 |
| --- a/chrome/browser/prerender/prerender_test_utils.h |
| +++ b/chrome/browser/prerender/prerender_test_utils.h |
| @@ -5,10 +5,14 @@ |
| #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ |
| #define CHROME_BROWSER_PRERENDER_PRERENDER_TEST_UTILS_H_ |
| +#include <functional> |
| + |
| #include "base/memory/weak_ptr.h" |
| #include "base/run_loop.h" |
| +#include "base/test/histogram_tester.h" |
| #include "chrome/browser/external_protocol/external_protocol_handler.h" |
| #include "chrome/browser/prerender/prerender_contents.h" |
| +#include "chrome/browser/prerender/prerender_manager.h" |
| #include "chrome/browser/safe_browsing/test_safe_browsing_service.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "components/safe_browsing_db/test_database_manager.h" |
| @@ -182,7 +186,47 @@ class TestPrerender : public PrerenderContents::Observer, |
| DISALLOW_COPY_AND_ASSIGN(TestPrerender); |
| }; |
| -// PrerenderManager that uses TestPrerenderContents. |
| +// Blocks until a TestPrerenderContents has been destroyed with the given final |
| +// status. Should be created with a TestPrerenderContents, and then |
| +// WaitForDestroy should be called and its return value checked. |
| +class DestructionWaiter { |
| + public: |
| + // Does not own the prerender_contents, which must outlive any call to |
| + // WaitForDestroy(). |
| + DestructionWaiter(TestPrerenderContents* prerender_contents, |
| + FinalStatus expected_final_status); |
| + |
| + ~DestructionWaiter(); |
| + |
| + // Returns true if the TestPrerenderContents was destroyed with the correct |
| + // final status, or false otherwise. Note this also may hang if the contents |
| + // is never destroyed (which will presumably cause the test to time out). |
| + bool WaitForDestroy(); |
| + |
| + private: |
| + class DestructionMarker : public PrerenderContents::Observer { |
| + public: |
| + // Does not own the waiter which must outlive the TestPrerenderContents. |
| + explicit DestructionMarker(DestructionWaiter* waiter); |
| + |
| + ~DestructionMarker() override; |
| + |
| + void OnPrerenderStop(PrerenderContents* contents) override; |
| + |
| + private: |
| + DestructionWaiter* waiter_; |
| + }; |
| + |
| + // To be called by a DestructionMarker. |
| + void MarkDestruction(FinalStatus reason); |
| + |
| + base::RunLoop wait_loop_; |
| + FinalStatus expected_final_status_; |
| + bool saw_correct_status_; |
| + std::unique_ptr<DestructionMarker> marker_; |
| +}; |
| + |
| +// PrerenderContentsFactory that uses TestPrerenderContents. |
| class TestPrerenderContentsFactory : public PrerenderContents::Factory { |
| public: |
| TestPrerenderContentsFactory(); |
| @@ -226,6 +270,11 @@ class PrerenderInProcessBrowserTest : virtual public InProcessBrowserTest { |
| void SetUpOnMainThread() override; |
| content::SessionStorageNamespace* GetSessionStorageNamespace() const; |
| + // Many of the file and server manipulation commands are fussy about paths |
| + // being relative or absolute. This makes path absolute if it is not |
| + // already. The path must not be empty. |
| + std::string MakeAbsolute(const std::string& path); |
| + |
| bool UrlIsInPrerenderManager(const std::string& html_file) const; |
| bool UrlIsInPrerenderManager(const GURL& url) const; |
| @@ -242,20 +291,28 @@ class PrerenderInProcessBrowserTest : virtual public InProcessBrowserTest { |
| FinalStatus expected_final_status, |
| int expected_number_of_loads); |
| + std::unique_ptr<TestPrerender> PrerenderTestURL( |
| + const GURL& url, |
| + FinalStatus expected_final_status, |
| + int expected_number_of_loads); |
| + |
| ScopedVector<TestPrerender> PrerenderTestURL( |
| const std::string& html_file, |
| const std::vector<FinalStatus>& expected_final_status_queue, |
| int expected_number_of_loads); |
| - std::unique_ptr<TestPrerender> PrerenderTestURL( |
| - const GURL& url, |
| - FinalStatus expected_final_status, |
| - int expected_number_of_loads); |
| + void UseHttpsSrcServer(); |
| + |
| + // Returns the currently active server. See UseHttpsSrcServer. |
|
pasko
2016/10/11 13:56:23
nit: |UseHttpsSrcServer()|
mattcary
2016/10/11 15:08:58
Done.
|
| + net::EmbeddedTestServer* src_server(); |
| safe_browsing::TestSafeBrowsingServiceFactory* safe_browsing_factory() const { |
| return safe_browsing_factory_.get(); |
| } |
| + test_utils::FakeSafeBrowsingDatabaseManager* |
| + GetFakeSafeBrowsingDatabaseManager(); |
| + |
| TestPrerenderContentsFactory* prerender_contents_factory() const { |
| return prerender_contents_factory_; |
| } |
| @@ -268,6 +325,23 @@ class PrerenderInProcessBrowserTest : virtual public InProcessBrowserTest { |
| return explicitly_set_browser_ ? explicitly_set_browser_ : browser(); |
| } |
| + const base::HistogramTester& histogram_tester() { return histogram_tester_; } |
| + |
| + // Returns a string for pattern-matching TaskManager tab entries. |
| + base::string16 MatchTaskManagerTab(const char* page_title); |
| + |
| + // Returns a string for pattern-matching TaskManager prerender entries. |
| + base::string16 MatchTaskManagerPrerender(const char* page_title); |
| + |
| + protected: |
| + // To be called from PrerenderTestUrlImpl. Sets up the appropraite prerenders, |
| + // checking for the expected final status, navigates to the loader url, and |
| + // waits for the load. |
| + ScopedVector<TestPrerender> NavigateWithPrerenders( |
| + const GURL& loader_url, |
| + const std::vector<FinalStatus>& expected_final_status_queue, |
| + int expected_number_of_loads); |
| + |
| private: |
| // Implement load of a url for a prerender test. prerender_url should be |
| // loaded, and we should expect to see one prerenderer created, and exit, for |
| @@ -287,6 +361,8 @@ class PrerenderInProcessBrowserTest : virtual public InProcessBrowserTest { |
| TestPrerenderContentsFactory* prerender_contents_factory_; |
| Browser* explicitly_set_browser_; |
| bool autostart_test_server_; |
| + base::HistogramTester histogram_tester_; |
| + std::unique_ptr<net::EmbeddedTestServer> https_src_server_; |
| }; |
| // Makes |url| respond to requests with the contents of |file|, counting the |