Index: content/public/test/browser_test_utils.h |
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h |
index 52f48f18fd7330fcf6c6a9f155c2288064e05d9c..7ffd2a3204cc4ffa1a2b6012ff9643b8ccd1b93f 100644 |
--- a/content/public/test/browser_test_utils.h |
+++ b/content/public/test/browser_test_utils.h |
@@ -61,6 +61,7 @@ namespace content { |
class BrowserContext; |
class MessageLoopRunner; |
+class NavigationHandle; |
class RenderViewHost; |
class RenderWidgetHost; |
class WebContents; |
@@ -574,6 +575,61 @@ class BrowserTestClipboardScope { |
DISALLOW_COPY_AND_ASSIGN(BrowserTestClipboardScope); |
}; |
+// This class can be used to pause and resume navigations, based on a URL |
+// match. Note that it only keeps track of one navigation at a time. |
+// Navigations are paused automatically before hitting the network, and are |
+// resumed automatically if a Wait method is called for a future event. |
+// Note: This class is one time use only! After it successfully tracks a |
+// navigation it will ignore all subsequent navigations. Explicitly create |
+// mutliple of these managers if you want to pause multiple navigations. |
nasko
2016/08/01 15:29:23
nit: "multiple instances of this class if you ..."
Charlie Harrison
2016/08/01 17:42:19
Done.
|
+class TestNavigationManager : public WebContentsObserver { |
+ public: |
+ // Monitors notifications within the given frame tree node. Use the other |
nasko
2016/08/01 15:29:23
FrameTreeNode is mostly internal concept to conten
Charlie Harrison
2016/08/01 17:42:19
So, Camille wanted this functionality as a prereq
nasko
2016/08/01 23:38:11
We don't have anyone outside of content/ using thi
Charlie Harrison
2016/08/02 13:09:15
Fair point. I've removed the method and added a s
|
+ // constructor if the manager should monitor all frames, which is equivalent |
+ // to passing kFrameTreeNodeInvalidId for |frame_tree_node_id|. |
+ TestNavigationManager(int frame_tree_node_id, |
+ WebContents* web_contents, |
+ const GURL& url); |
+ |
+ // Monitors any frame in WebContents. |
+ TestNavigationManager(WebContents* web_contents, const GURL& url); |
+ |
+ ~TestNavigationManager() override; |
+ |
+ // Waits until the navigation request is ready to be sent to the network |
+ // stack. Returns false if the request was aborted before starting. |
+ WARN_UNUSED_RESULT bool WaitForWillStartRequest(); |
+ |
+ // Waits until the navigation has been finished. Will automatically resume |
+ // navigations paused before this point. |
+ void WaitForNavigationFinished(); |
+ |
+ private: |
+ // WebContentsObserver: |
+ void DidStartNavigation(NavigationHandle* handle) override; |
+ void DidFinishNavigation(NavigationHandle* handle) override; |
+ |
+ // Called when the NavigationThrottle pauses the navigation in |
+ // WillStartRequest. |
+ void OnWillStartRequest(); |
+ |
+ // Resumes the navigation. |
+ void ResumeNavigation(); |
+ |
+ // If this member is not |kFrameTreeNodeInvalidId|, notifications are filtered |
+ // so only this frame is monitored. |
+ int filtering_frame_tree_node_id_; |
+ |
+ const GURL url_; |
+ bool navigation_paused_; |
+ NavigationHandle* handle_; |
+ bool handled_navigation_; |
+ scoped_refptr<MessageLoopRunner> will_start_loop_runner_; |
+ scoped_refptr<MessageLoopRunner> did_finish_loop_runner_; |
+ |
+ base::WeakPtrFactory<TestNavigationManager> weak_factory_; |
+}; |
+ |
} // namespace content |
#endif // CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_ |