OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_TEST_BASE_JAVASCRIPT_TEST_OBSERVER_H_ | |
6 #define CHROME_TEST_BASE_JAVASCRIPT_TEST_OBSERVER_H_ | |
7 | |
8 #include <string> | |
9 | |
10 #include "base/compiler_specific.h" | |
11 #include "content/public/browser/notification_observer.h" | |
12 #include "content/public/browser/notification_registrar.h" | |
13 | |
14 namespace base { | |
15 class DictionaryValue; | |
16 } | |
17 | |
18 namespace content { | |
19 class WebContents; | |
20 } | |
21 | |
22 // Base class for handling a stream of automation messages produced by a | |
23 // JavascriptTestObserver. | |
24 class TestMessageHandler { | |
25 public: | |
26 enum MessageResponse { | |
27 // Reset the timeout and keep running. | |
28 CONTINUE, | |
29 // Stop runnning. | |
30 DONE | |
31 }; | |
32 | |
33 TestMessageHandler(); | |
34 virtual ~TestMessageHandler(); | |
35 | |
36 // Called when a message is received from the DOM automation controller. | |
37 virtual MessageResponse HandleMessage(const std::string& json) = 0; | |
38 | |
39 void SetError(const std::string& message); | |
40 | |
41 bool ok() const { | |
42 return ok_; | |
43 } | |
44 | |
45 const std::string& error_message() const { | |
46 return error_message_; | |
47 } | |
48 | |
49 // Prepare the handler to be used or reused. | |
50 virtual void Reset(); | |
51 | |
52 private: | |
53 bool ok_; | |
54 std::string error_message_; | |
55 }; | |
56 | |
57 // This class captures a stream of automation messages coming from a Javascript | |
58 // test and dispatches them to a message handler. | |
59 class JavascriptTestObserver : public content::NotificationObserver { | |
60 public: | |
61 // The observer does not own any arguments passed to it. It is assumed that | |
62 // the arguments will outlive all uses of the observer. | |
63 JavascriptTestObserver( | |
64 content::WebContents* web_contents, | |
65 TestMessageHandler* handler); | |
66 | |
67 virtual ~JavascriptTestObserver(); | |
68 | |
69 // Pump the message loop until the message handler indicates the Javascript | |
70 // test is done running. Return true if the test jig functioned correctly and | |
71 // nothing timed out. | |
72 bool Run(); | |
73 | |
74 // Prepare the observer to be used again. This method should NOT be called | |
75 // while Run() is pumping the message loop. | |
76 void Reset(); | |
77 | |
78 virtual void Observe( | |
79 int type, | |
80 const content::NotificationSource& source, | |
81 const content::NotificationDetails& details) OVERRIDE; | |
82 | |
83 private: | |
84 // This message did not signal the end of a test, keep going. | |
85 void Continue(); | |
86 | |
87 // This was the last message we care about, stop listening for more messages. | |
88 void EndTest(); | |
89 | |
90 TestMessageHandler* handler_; | |
91 bool running_; | |
92 bool finished_; | |
93 content::NotificationRegistrar registrar_; | |
94 | |
95 DISALLOW_COPY_AND_ASSIGN(JavascriptTestObserver); | |
96 }; | |
97 | |
98 #endif // CHROME_TEST_BASE_JAVASCRIPT_TEST_OBSERVER_H_ | |
OLD | NEW |