2011-07-04 Vsevolod Vlasov <vsevik@chromium.org>
[WebKit-https.git] / Source / WebCore / inspector / NetworkResourcesData.h
1 /*
2  * Copyright (C) 2011 Google 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 are
6  * met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
20  * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef NetworkResourcesData_h
30 #define NetworkResourcesData_h
31
32 #include "CachedResourceHandle.h"
33 #include "InspectorPageAgent.h"
34
35 #include <wtf/Deque.h>
36 #include <wtf/HashMap.h>
37 #include <wtf/RefCounted.h>
38 #include <wtf/text/StringBuilder.h>
39 #include <wtf/text/WTFString.h>
40
41 #if ENABLE(INSPECTOR)
42
43 namespace WebCore {
44
45 class CachedResource;
46 class SharedBuffer;
47 class TextResourceDecoder;
48
49 class NetworkResourcesData {
50 public:
51     class ResourceData {
52         friend class NetworkResourcesData;
53     public:
54         ResourceData(unsigned long identifier, const String& loaderId);
55
56         unsigned long identifier() const { return m_identifier; }
57         String loaderId() const { return m_loaderId; }
58
59         String frameId() const { return m_frameId; }
60         void setFrameId(const String& frameId) { m_frameId = frameId; }
61
62         String url() const { return m_url; }
63         void setUrl(const String& url) { m_url = url; }
64
65         bool hasContent() const { return !m_content.isNull(); }
66         String content() const { return m_content; }
67         void setContent(const String&);
68
69         bool isContentPurged() const { return m_isContentPurged; }
70         unsigned purgeContent();
71
72         InspectorPageAgent::ResourceType type() const { return m_type; }
73         void setType(InspectorPageAgent::ResourceType type) { m_type = type; }
74
75         String textEncodingName() const { return m_textEncodingName; }
76         void setTextEncodingName(const String& textEncodingName) { m_textEncodingName = textEncodingName; }
77
78         TextResourceDecoder* decoder() const { return m_decoder.get(); }
79         void createDecoder(const String& mimeType, const String& textEncodingName);
80
81         PassRefPtr<SharedBuffer> buffer() const { return m_buffer; }
82         void setBuffer(PassRefPtr<SharedBuffer> buffer) { m_buffer = buffer; }
83
84         CachedResource* cachedResource() const { return m_cachedResource.get(); }
85         void setCachedResource(CachedResource* cachedResource) { m_cachedResource = cachedResource; }
86
87     private:
88         bool hasData() const { return m_dataBuffer; }
89         int dataLength() const;
90         void appendData(const char* data, int dataLength);
91         int decodeDataToContent();
92
93         unsigned long m_identifier;
94         String m_loaderId;
95         String m_frameId;
96         String m_url;
97         String m_content;
98         RefPtr<SharedBuffer> m_dataBuffer;
99         bool m_isContentPurged;
100         InspectorPageAgent::ResourceType m_type;
101
102         String m_textEncodingName;
103         RefPtr<TextResourceDecoder> m_decoder;
104
105         RefPtr<SharedBuffer> m_buffer;
106         CachedResourceHandle<CachedResource> m_cachedResource;
107     };
108
109     NetworkResourcesData();
110
111     ~NetworkResourcesData();
112
113     void resourceCreated(unsigned long identifier, const String& loaderId);
114     void responseReceived(unsigned long identifier, const String& frameId, const ResourceResponse&);
115     void setResourceType(unsigned long identifier, InspectorPageAgent::ResourceType);
116     InspectorPageAgent::ResourceType resourceType(unsigned long identifier);
117     void setResourceContent(unsigned long identifier, const String& content);
118     void maybeAddResourceData(unsigned long identifier, const char* data, int dataLength);
119     void maybeDecodeDataToContent(unsigned long identifier);
120     void addCachedResource(unsigned long identifier, CachedResource*);
121     void addResourceSharedBuffer(unsigned long identifier, PassRefPtr<SharedBuffer>, const String& textEncodingName);
122     ResourceData const* data(unsigned long identifier);
123     void clear(const String& preservedLoaderId = String());
124
125     void setResourcesDataSizeLimits(int maximumResourcesContentSize, int maximumSingleResourceContentSize);
126
127 private:
128     void ensureNoDataForIdentifier(unsigned long identifier);
129     bool ensureFreeSpace(int size);
130
131     Deque<unsigned long> m_identifiersDeque;
132
133     typedef HashMap<unsigned long, ResourceData*> ResourceDataMap;
134     ResourceDataMap m_identifierToResourceDataMap;
135     int m_contentSize;
136     int m_maximumResourcesContentSize;
137     int m_maximumSingleResourceContentSize;
138 };
139
140 } // namespace WebCore
141
142 #endif // ENABLE(INSPECTOR)
143
144 #endif // !defined(NetworkResourcesData_h)