Unreviewed build fix
[WebKit-https.git] / Source / WebCore / inspector / agents / page / PageNetworkAgent.cpp
1 /*
2  * Copyright (C) 2017 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 #include "config.h"
27 #include "PageNetworkAgent.h"
28
29 #include "CustomHeaderFields.h"
30 #include "Document.h"
31 #include "DocumentLoader.h"
32 #include "Frame.h"
33 #include "InstrumentingAgents.h"
34 #include "Page.h"
35 #include "ScriptState.h"
36 #include "WebSocket.h"
37 #include "WebSocketChannel.h"
38
39 namespace WebCore {
40
41 using namespace Inspector;
42
43 PageNetworkAgent::PageNetworkAgent(PageAgentContext& context)
44     : InspectorNetworkAgent(context)
45     , m_inspectedPage(context.inspectedPage)
46 {
47 }
48
49 String PageNetworkAgent::loaderIdentifier(DocumentLoader* loader)
50 {
51     if (loader) {
52         if (auto* pageAgent = m_instrumentingAgents.inspectorPageAgent())
53             return pageAgent->loaderId(loader);
54     }
55     return { };
56 }
57
58 String PageNetworkAgent::frameIdentifier(DocumentLoader* loader)
59 {
60     if (loader) {
61         if (auto* pageAgent = m_instrumentingAgents.inspectorPageAgent())
62             return pageAgent->frameId(loader->frame());
63     }
64     return { };
65 }
66
67 Vector<WebSocket*> PageNetworkAgent::activeWebSockets(const LockHolder& lock)
68 {
69     Vector<WebSocket*> webSockets;
70
71     for (WebSocket* webSocket : WebSocket::allActiveWebSockets(lock)) {
72         if (!is<WebSocketChannel>(webSocket->channel().get()))
73             continue;
74
75         auto* channel = downcast<WebSocketChannel>(webSocket->channel().get());
76         if (!channel)
77             continue;
78
79         if (!channel->hasCreatedHandshake())
80             continue;
81
82         if (!is<Document>(webSocket->scriptExecutionContext()))
83             continue;
84
85         // FIXME: <https://webkit.org/b/168475> Web Inspector: Correctly display iframe's WebSockets
86         auto* document = downcast<Document>(webSocket->scriptExecutionContext());
87         if (document->page() != &m_inspectedPage)
88             continue;
89
90         webSockets.append(webSocket);
91     }
92
93     return webSockets;
94 }
95
96 void PageNetworkAgent::setResourceCachingDisabled(bool disabled)
97 {
98     m_inspectedPage.setResourceCachingDisabledOverride(disabled);
99 }
100
101 ScriptExecutionContext* PageNetworkAgent::scriptExecutionContext(ErrorString& errorString, const String& frameId)
102 {
103     auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
104     if (!pageAgent) {
105         errorString = "Missing Page agent"_s;
106         return nullptr;
107     }
108
109     auto* frame = pageAgent->assertFrame(errorString, frameId);
110     if (!frame)
111         return nullptr;
112
113     auto* document = frame->document();
114     if (!document) {
115         errorString = "No Document instance for the specified frame"_s;
116         return nullptr;
117     }
118
119     return document;
120 }
121
122 } // namespace WebCore