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 cb917f6f1e8e9cc13c3613cf97cacce85628e828..823dba059a9bd33e315bf0f7796ba1dc8973ce96 100644 |
--- a/content/public/test/browser_test_utils.h |
+++ b/content/public/test/browser_test_utils.h |
@@ -192,6 +192,49 @@ RenderFrameHost* ConvertToRenderFrameHost(RenderViewHost* render_view_host); |
RenderFrameHost* ConvertToRenderFrameHost(RenderFrameHost* render_view_host); |
RenderFrameHost* ConvertToRenderFrameHost(WebContents* web_contents); |
+class DOMAutomationWaiter : public NotificationObserver, |
ncarter (slow)
2016/11/01 19:50:52
Can we do this as an enhancement to the existing D
Łukasz Anforowicz
2016/11/01 23:43:41
Agreed that DOMAutomationWaiter can be scraped and
|
+ public WebContentsObserver { |
+ public: |
+ // Starts monitoring the |target| for calls to |
+ // window.domAutomationController.send(...). |
+ explicit DOMAutomationWaiter(WebContents* target); |
+ |
+ ~DOMAutomationWaiter() override; |
+ |
+ // Waits until the window.domAutomationController.send(response) is called |
+ // inside the |target| (the one that was passed to the constructor) and |
+ // ShouldStopWaiting returns true for the |response| received from |target|. |
+ // |
+ // If |out_response| is not null, then it will receive the |response| from the |
+ // |target|. It is okay if |out_response| is null. |
+ // |
+ // Returns true if the expected response was received (and false if the wait |
+ // was intrrupted for other reasons - e.g. if a renderer crashed). |
+ bool WaitAndGetResponse(std::unique_ptr<base::Value>* out_response) |
+ WARN_UNUSED_RESULT; |
+ |
+ protected: |
+ // Returns whether to stop waiting for the given |response| value (passed by |
+ // javascript to window.domAutomationController.send). In default |
+ // implementation all |response| values stop waiting. |
+ virtual bool ShouldStopWaiting(const base::Value& response); |
Łukasz Anforowicz
2016/11/01 23:43:41
Yesterday I read an article arguing for minimizing
|
+ |
+ private: |
+ // WebContentsObserver overrides, |
ncarter (slow)
2016/11/01 19:50:52
, -> .
Łukasz Anforowicz
2016/11/01 23:43:41
Acknowledged. (not applicable anymore after remov
|
+ void RenderProcessGone(base::TerminationStatus status) override; |
+ |
+ // NotificationObserver overrides. |
+ void Observe(int type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) override; |
+ |
+ std::unique_ptr<base::Value> response_; |
+ scoped_refptr<MessageLoopRunner> message_loop_runner_; |
+ NotificationRegistrar registrar_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DOMAutomationWaiter); |
+}; |
+ |
// Executes the passed |script| in the specified frame. The |script| should not |
// invoke domAutomationController.send(); otherwise, your test will hang or be |
// flaky. If you want to extract a result, use one of the below functions. |