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 WebInspectorProxy_h
27#define WebInspectorProxy_h
28
29#if ENABLE(INSPECTOR)
30
31#include "APIObject.h"
32#include "Connection.h"
33#include <wtf/Forward.h>
34#include <wtf/PassRefPtr.h>
35#include <wtf/RefPtr.h>
36
37#if PLATFORM(MAC)
38#include <wtf/RetainPtr.h>
39
40OBJC_CLASS NSWindow;
41OBJC_CLASS WKView;
42OBJC_CLASS WebInspectorProxyObjCAdapter;
43#endif
44
45namespace WebKit {
46
47class WebPageGroup;
48class WebPageProxy;
49struct WebPageCreationParameters;
50
51#if PLATFORM(WIN)
52class WebView;
53#endif
54
55class WebInspectorProxy : public APIObject {
56public:
57    static const Type APIType = TypeInspector;
58
59    static PassRefPtr<WebInspectorProxy> create(WebPageProxy* page)
60    {
61        return adoptRef(new WebInspectorProxy(page));
62    }
63
64    ~WebInspectorProxy();
65
66    void invalidate();
67
68    // Public APIs
69    WebPageProxy* page() { return m_page; }
70
71    bool isVisible() const { return m_isVisible; }
72    void show();
73    void close();
74
75    void showConsole();
76
77    bool isAttached() const { return m_isAttached; }
78    void attach();
79    void detach();
80
81    bool isDebuggingJavaScript() const { return m_isDebuggingJavaScript; }
82    void toggleJavaScriptDebugging();
83
84    bool isProfilingJavaScript() const { return m_isProfilingJavaScript; }
85    void toggleJavaScriptProfiling();
86
87    bool isProfilingPage() const { return m_isProfilingPage; }
88    void togglePageProfiling();
89
90#if ENABLE(INSPECTOR)
91    // Implemented in generated WebInspectorProxyMessageReceiver.cpp
92    void didReceiveWebInspectorProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
93    CoreIPC::SyncReplyMode didReceiveSyncWebInspectorProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
94#endif
95
96    static bool isInspectorPage(WebPageProxy*);
97
98private:
99    WebInspectorProxy(WebPageProxy* page);
100
101    virtual Type type() const { return APIType; }
102
103    WebPageProxy* platformCreateInspectorPage();
104    void platformOpen();
105    void platformClose();
106    void platformInspectedURLChanged(const String&);
107
108    // Implemented the platform WebInspectorProxy file
109    String inspectorPageURL() const;
110
111    // Called by WebInspectorProxy messages
112    void createInspectorPage(uint64_t& inspectorPageID, WebPageCreationParameters&);
113    void didLoadInspectorPage();
114    void didClose();
115    void inspectedURLChanged(const String&);
116
117    static WebPageGroup* inspectorPageGroup();
118
119#if PLATFORM(WIN)
120    static bool registerInspectorViewWindowClass();
121    static LRESULT CALLBACK InspectorViewWndProc(HWND, UINT, WPARAM, LPARAM);
122    LRESULT wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
123
124    LRESULT onSizeEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
125    LRESULT onMinMaxInfoEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
126    LRESULT onSetFocusEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
127    LRESULT onCloseEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
128#endif
129
130    static const unsigned minimumWindowWidth = 500;
131    static const unsigned minimumWindowHeight = 400;
132
133    static const unsigned initialWindowWidth = 750;
134    static const unsigned initialWindowHeight = 650;
135
136    WebPageProxy* m_page;
137
138    bool m_isVisible;
139    bool m_isAttached;
140    bool m_isDebuggingJavaScript;
141    bool m_isProfilingJavaScript;
142    bool m_isProfilingPage;
143
144#if PLATFORM(MAC)
145    RetainPtr<WKView> m_inspectorView;
146    RetainPtr<NSWindow> m_inspectorWindow;
147    RetainPtr<WebInspectorProxyObjCAdapter> m_inspectorProxyObjCAdapter;
148#elif PLATFORM(WIN)
149    HWND m_inspectorWindow;
150    RefPtr<WebView> m_inspectorView;
151#endif
152};
153
154} // namespace WebKit
155
156#endif // ENABLE(INSPECTOR)
157
158#endif // WebInspectorProxy_h
159