2011-01-18 Maciej Stachowiak <mjs@apple.com>
[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     WKBundleFrameRef topLoadingFrame() { return m_topLoadingFrame; }
69     void setTopLoadingFrame(WKBundleFrameRef frame) { m_topLoadingFrame = frame; }
70
71 private:
72     InjectedBundle();
73     ~InjectedBundle();
74
75     static void didCreatePage(WKBundleRef, WKBundlePageRef, const void* clientInfo);
76     static void willDestroyPage(WKBundleRef, WKBundlePageRef, const void* clientInfo);
77     static void didInitializePageGroup(WKBundleRef, WKBundlePageGroupRef, const void* clientInfo);
78     static void didReceiveMessage(WKBundleRef, WKStringRef messageName, WKTypeRef messageBody, const void* clientInfo);
79
80     void didCreatePage(WKBundlePageRef);
81     void willDestroyPage(WKBundlePageRef);
82     void didInitializePageGroup(WKBundlePageGroupRef);
83     void didReceiveMessage(WKStringRef messageName, WKTypeRef messageBody);
84
85     void beginTesting();
86
87     WKBundleRef m_bundle;
88     WKBundlePageGroupRef m_pageGroup;
89     Vector<OwnPtr<InjectedBundlePage> > m_pages;
90
91     RefPtr<LayoutTestController> m_layoutTestController;
92     RefPtr<GCController> m_gcController;
93     RefPtr<EventSendingController> m_eventSendingController;
94
95     WKBundleFrameRef m_topLoadingFrame;
96
97     std::ostringstream m_outputStream;
98     
99     enum State {
100         Idle,
101         Testing,
102         Stopping
103     };
104     State m_state;
105 };
106
107 } // namespace WTR
108
109 #endif // InjectedBundle_h