Windows should animate when they are about to get docked at screen edges.
[chromium-blink-merge.git] / net / tools / flip_server / mem_cache.h
blob806ae53689b87052c448f7ee367b799942f8d1ca
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef NET_TOOLS_FLIP_SERVER_MEM_CACHE_H_
6 #define NET_TOOLS_FLIP_SERVER_MEM_CACHE_H_
8 #include <map>
9 #include <string>
11 #include "base/compiler_specific.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "net/tools/flip_server/balsa_headers.h"
14 #include "net/tools/flip_server/balsa_visitor_interface.h"
15 #include "net/tools/flip_server/constants.h"
17 namespace net {
19 class StoreBodyAndHeadersVisitor: public BalsaVisitorInterface {
20 public:
21 void HandleError() { error_ = true; }
23 // BalsaVisitorInterface:
24 virtual void ProcessBodyInput(const char *input, size_t size) OVERRIDE {}
25 virtual void ProcessBodyData(const char *input, size_t size) OVERRIDE;
26 virtual void ProcessHeaderInput(const char *input, size_t size) OVERRIDE {}
27 virtual void ProcessTrailerInput(const char *input, size_t size) OVERRIDE {}
28 virtual void ProcessHeaders(const BalsaHeaders& headers) OVERRIDE {
29 // nothing to do here-- we're assuming that the BalsaFrame has
30 // been handed our headers.
32 virtual void ProcessRequestFirstLine(const char* line_input,
33 size_t line_length,
34 const char* method_input,
35 size_t method_length,
36 const char* request_uri_input,
37 size_t request_uri_length,
38 const char* version_input,
39 size_t version_length) OVERRIDE {}
40 virtual void ProcessResponseFirstLine(const char *line_input,
41 size_t line_length,
42 const char *version_input,
43 size_t version_length,
44 const char *status_input,
45 size_t status_length,
46 const char *reason_input,
47 size_t reason_length) OVERRIDE {}
48 virtual void ProcessChunkLength(size_t chunk_length) OVERRIDE {}
49 virtual void ProcessChunkExtensions(const char *input,
50 size_t size) OVERRIDE {}
51 virtual void HeaderDone() OVERRIDE {}
52 virtual void MessageDone() OVERRIDE {}
53 virtual void HandleHeaderError(BalsaFrame* framer) OVERRIDE;
54 virtual void HandleHeaderWarning(BalsaFrame* framer) OVERRIDE;
55 virtual void HandleChunkingError(BalsaFrame* framer) OVERRIDE;
56 virtual void HandleBodyError(BalsaFrame* framer) OVERRIDE;
58 BalsaHeaders headers;
59 std::string body;
60 bool error_;
63 ////////////////////////////////////////////////////////////////////////////////
64 class FileData {
65 public:
66 FileData();
67 FileData(const BalsaHeaders* headers,
68 const std::string& filename,
69 const std::string& body);
70 ~FileData();
72 BalsaHeaders* headers() { return headers_.get(); }
73 const BalsaHeaders* headers() const { return headers_.get(); }
75 const std::string& filename() { return filename_; }
76 const std::string& body() { return body_; }
78 private:
79 scoped_ptr<BalsaHeaders> headers_;
80 std::string filename_;
81 std::string body_;
83 DISALLOW_COPY_AND_ASSIGN(FileData);
86 ////////////////////////////////////////////////////////////////////////////////
88 class MemCacheIter {
89 public:
90 MemCacheIter() :
91 file_data(NULL),
92 priority(0),
93 transformed_header(false),
94 body_bytes_consumed(0),
95 stream_id(0),
96 max_segment_size(kInitialDataSendersThreshold),
97 bytes_sent(0) {}
98 explicit MemCacheIter(FileData* fd) :
99 file_data(fd),
100 priority(0),
101 transformed_header(false),
102 body_bytes_consumed(0),
103 stream_id(0),
104 max_segment_size(kInitialDataSendersThreshold),
105 bytes_sent(0) {}
106 FileData* file_data;
107 int priority;
108 bool transformed_header;
109 size_t body_bytes_consumed;
110 uint32 stream_id;
111 uint32 max_segment_size;
112 size_t bytes_sent;
115 ////////////////////////////////////////////////////////////////////////////////
117 class MemoryCache {
118 public:
119 typedef std::map<std::string, FileData*> Files;
121 public:
122 MemoryCache();
123 virtual ~MemoryCache();
125 void CloneFrom(const MemoryCache& mc);
127 void AddFiles();
129 // virtual for unittests
130 virtual void ReadToString(const char* filename, std::string* output);
132 void ReadAndStoreFileContents(const char* filename);
134 FileData* GetFileData(const std::string& filename);
136 bool AssignFileData(const std::string& filename, MemCacheIter* mci);
138 private:
139 void ClearFiles();
141 Files files_;
142 std::string cwd_;
145 class NotifierInterface {
146 public:
147 virtual ~NotifierInterface() {}
148 virtual void Notify() = 0;
151 } // namespace net
153 #endif // NET_TOOLS_FLIP_SERVER_MEM_CACHE_H_