c1d8b37f977fbdd70e0cf2c0588828d777c566ef
[WebKit.git] / Tools / WebKitTestRunner / InjectedBundle / InjectedBundle.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef InjectedBundle_h
27 #define InjectedBundle_h
28
29 #include "EventSendingController.h"
30 #include "GCController.h"
31 #include "LayoutTestController.h"
32 #include <WebKit2/WKBase.h>
33 #include <wtf/OwnPtr.h>
34 #include <wtf/RefPtr.h>
35 #include <wtf/Vector.h>
36
37 #include <sstream>
38
39 namespace WTR {
40
41 class InjectedBundlePage;
42
43 class InjectedBundle {
44 public:
45     static InjectedBundle& shared();
46
47     // Initialize the InjectedBundle.
48     void initialize(WKBundleRef);
49
50     WKBundleRef bundle() const { return m_bundle; }
51     WKBundlePageGroupRef pageGroup() const { return m_pageGroup; }
52
53     LayoutTestController* layoutTestController() { return m_layoutTestController.get(); }
54     GCController* gcController() { return m_gcController.get(); }
55     EventSendingController* eventSendingController() { return m_eventSendingController.get(); }
56
57     InjectedBundlePage* page() const;
58     size_t pageCount() const { return m_pages.size(); }
59     void closeOtherPages();
60
61     void dumpBackForwardListsForAllPages();
62
63     void done();
64     std::ostringstream& os() { return m_outputStream; }
65
66     bool isTestRunning() { return m_state == Testing; }
67
68 private:
69     InjectedBundle();
70     ~InjectedBundle();
71
72     static void didCreatePage(WKBundleRef, WKBundlePageRef, const void* clientInfo);
73     static void willDestroyPage(WKBundleRef, WKBundlePageRef, const void* clientInfo);
74     static void didInitializePageGroup(WKBundleRef, WKBundlePageGroupRef, const void* clientInfo);
75     static void didReceiveMessage(WKBundleRef, WKStringRef messageName, WKTypeRef messageBody, const void* clientInfo);
76
77     void didCreatePage(WKBundlePageRef);
78     void willDestroyPage(WKBundlePageRef);
79     void didInitializePageGroup(WKBundlePageGroupRef);
80     void didReceiveMessage(WKStringRef messageName, WKTypeRef messageBody);
81
82     void beginTesting();
83
84     WKBundleRef m_bundle;
85     WKBundlePageGroupRef m_pageGroup;
86     Vector<OwnPtr<InjectedBundlePage> > m_pages;
87
88     RefPtr<LayoutTestController> m_layoutTestController;
89     RefPtr<GCController> m_gcController;
90     RefPtr<EventSendingController> m_eventSendingController;
91
92     std::ostringstream m_outputStream;
93     
94     enum State {
95         Idle,
96         Testing,
97         Stopping
98     };
99     State m_state;
100 };
101
102 } // namespace WTR
103
104 #endif // InjectedBundle_h