34e640a57f0b3bcc256f8b60364d5d9aee308487
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / WebInspector.h
1 /*
2  * Copyright (C) 2010, 2014 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 WebInspector_h
27 #define WebInspector_h
28
29 #if ENABLE(INSPECTOR)
30
31 #include "APIObject.h"
32 #include "Connection.h"
33 #include "MessageReceiver.h"
34 #include <WebCore/InspectorForwarding.h>
35 #include <wtf/Noncopyable.h>
36 #include <wtf/text/WTFString.h>
37
38 namespace WebKit {
39
40 class WebPage;
41
42 class WebInspector : public API::ObjectImpl<API::Object::Type::BundleInspector>, public IPC::Connection::Client, public WebCore::InspectorFrontendChannel {
43 public:
44     static PassRefPtr<WebInspector> create(WebPage*);
45
46     WebPage* page() const { return m_page; }
47
48     void updateDockingAvailability();
49
50     virtual bool sendMessageToFrontend(const String& message) override;
51
52     // Implemented in generated WebInspectorMessageReceiver.cpp
53     void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) override;
54
55     // IPC::Connection::Client
56     void didClose(IPC::Connection&) override { close(); }
57     void didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference, IPC::StringReference) override { close(); }
58
59     // Called by WebInspector messages
60     void connectionEstablished();
61
62     void show();
63     void close();
64
65     void openInNewTab(const String& urlString);
66
67     void canAttachWindow(bool& result);
68
69     void showConsole();
70     void showResources();
71
72     void showMainResourceForFrame(uint64_t frameIdentifier);
73
74     void setAttached(bool attached) { m_attached = attached; }
75
76     void evaluateScriptForTest(const String& script);
77
78     void startPageProfiling();
79     void stopPageProfiling();
80
81     void sendMessageToBackend(const String&);
82
83 #if ENABLE(INSPECTOR_SERVER)
84     void remoteFrontendConnected();
85     void remoteFrontendDisconnected();
86 #endif
87
88 private:
89     friend class WebInspectorClient;
90
91     explicit WebInspector(WebPage*);
92
93     bool canAttachWindow();
94
95     // Called from WebInspectorClient
96     void createInspectorPage(bool underTest);
97
98     void closeFrontend();
99     void bringToFront();
100
101     WebPage* m_page;
102
103     RefPtr<IPC::Connection> m_frontendConnection;
104
105     bool m_attached;
106     bool m_previousCanAttach;
107 #if ENABLE(INSPECTOR_SERVER)
108     bool m_remoteFrontendConnected;
109 #endif
110 };
111
112 } // namespace WebKit
113
114 #endif // ENABLE(INSPECTOR)
115
116 #endif // WebInspector_h