Pass String as reference in more places
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / WebInspectorUI.h
1 /*
2  * Copyright (C) 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 WebInspectorUI_h
27 #define WebInspectorUI_h
28
29 #include "APIObject.h"
30 #include "Connection.h"
31 #include <WebCore/InspectorForwarding.h>
32 #include <WebCore/InspectorFrontendClient.h>
33 #include <WebCore/InspectorFrontendHost.h>
34
35 namespace WebKit {
36
37 class WebPage;
38
39 class WebInspectorUI : public API::ObjectImpl<API::Object::Type::BundleInspectorUI>, public IPC::Connection::Client, public WebCore::InspectorFrontendClient {
40 public:
41     static PassRefPtr<WebInspectorUI> create(WebPage*);
42
43     WebPage* page() const { return m_page; }
44
45     // Implemented in generated WebInspectorUIMessageReceiver.cpp
46     void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&) override;
47
48     // IPC::Connection::Client
49     void didClose(IPC::Connection&) override { closeWindow(); }
50     void didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference, IPC::StringReference) override { closeWindow(); }
51     virtual IPC::ProcessType localProcessType() override { return IPC::ProcessType::Web; }
52     virtual IPC::ProcessType remoteProcessType() override { return IPC::ProcessType::Web; }
53
54     // Called by WebInspectorUI messages
55     void establishConnection(IPC::Attachment connectionIdentifier, uint64_t inspectedPageIdentifier, bool underTest);
56
57     void showConsole();
58     void showResources();
59
60     void showMainResourceForFrame(const String& frameIdentifier);
61
62     void startPageProfiling();
63     void stopPageProfiling();
64
65     void attachedBottom() { setDockSide(DockSide::Bottom); }
66     void attachedRight() { setDockSide(DockSide::Right); }
67     void detached() { setDockSide(DockSide::Undocked); }
68
69     void setDockSide(DockSide);
70     void setDockingUnavailable(bool);
71
72     void didSave(const String& url);
73     void didAppend(const String& url);
74
75     void sendMessageToFrontend(const String&);
76
77     // WebCore::InspectorFrontendClient
78     void windowObjectCleared() override;
79     void frontendLoaded() override;
80
81     void moveWindowBy(float x, float y) override;
82
83     String localizedStringsURL() override;
84
85     void bringToFront() override;
86     void closeWindow() override;
87
88     void requestSetDockSide(DockSide) override;
89     void changeAttachedWindowHeight(unsigned) override;
90     void changeAttachedWindowWidth(unsigned) override;
91
92     void setToolbarHeight(unsigned) override;
93
94     void openInNewTab(const String& url) override;
95
96     bool canSave() override;
97     void save(const WTF::String& url, const WTF::String& content, bool base64Encoded, bool forceSaveAs) override;
98     void append(const WTF::String& url, const WTF::String& content) override;
99
100     void inspectedURLChanged(const String&) override;
101
102     void sendMessageToBackend(const String&) override;
103
104     bool isUnderTest() override { return m_underTest; }
105
106 private:
107     explicit WebInspectorUI(WebPage*);
108
109     void evaluateCommandOnLoad(const String& command, const String& argument = String());
110     void evaluateCommandOnLoad(const String& command, const ASCIILiteral& argument) { evaluateCommandOnLoad(command, String(argument)); }
111     void evaluateCommandOnLoad(const String& command, bool argument);
112     void evaluateExpressionOnLoad(const String& expression);
113     void evaluatePendingExpressions();
114
115     WebPage* m_page;
116
117     RefPtr<IPC::Connection> m_backendConnection;
118     uint64_t m_inspectedPageIdentifier;
119
120     bool m_underTest;
121     bool m_frontendLoaded;
122     Deque<String> m_queue;
123
124     RefPtr<WebCore::InspectorFrontendHost> m_frontendHost;
125
126     DockSide m_dockSide;
127
128 #if PLATFORM(COCOA)
129     mutable String m_localizedStringsURL;
130     mutable bool m_hasLocalizedStringsURL;
131 #endif
132 };
133
134 } // namespace WebKit
135
136 #endif // WebInspectorUI_h