Popular sites on the NTP: check that experiment group StartsWith (rather than IS...
[chromium-blink-merge.git] / chrome / browser / safe_browsing / protocol_parser.h
blob4b7bf6c03ec14ae27f56baa95c0c2b71efff4486
1 // Copyright (c) 2012 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 CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_
6 #define CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_
8 // Parsers and formatters for SafeBrowsing v3.0 protocol:
9 // https://developers.google.com/safe-browsing/developers_guide_v3
11 // The quoted references are with respect to that document.
13 #include <string>
14 #include <vector>
16 #include "base/basictypes.h"
17 #include "base/memory/scoped_vector.h"
18 #include "chrome/browser/safe_browsing/safe_browsing_util.h"
20 namespace base {
21 class TimeDelta;
24 namespace safe_browsing {
26 // TODO(shess): Maybe the data/len pairs could be productively replaced with
27 // const base::StringPiece&.
29 // Parse body of "HTTP Response for Data". |*next_update_sec| is the minimum
30 // delay to next update. |*reset| is set to true if the update requested a
31 // database reset. |*chunk_deletes| receives add-del and sub-del requests,
32 // while |*chunk_urls| receives the list of redirect urls to fetch. Returns
33 // |false| if the update could not be decoded properly, in which case all
34 // results should be discarded.
35 bool ParseUpdate(const char* chunk_data,
36 size_t chunk_len,
37 size_t* next_update_sec,
38 bool* reset,
39 std::vector<SBChunkDelete>* chunk_deletes,
40 std::vector<ChunkUrl>* chunk_urls);
42 // Parse body of a redirect response. |*chunks| receives the parsed chunk data.
43 // Returns |false| if the data could not be parsed correctly, in which case all
44 // results should be discarded.
45 bool ParseChunk(const char* chunk_data,
46 size_t chunk_len,
47 ScopedVector<SBChunkData>* chunks);
49 // Parse body of "HTTP Response for Full-Length Hashes", returning the list of
50 // full hashes. Returns |false| if the data could not be parsed correctly, in
51 // which case all results should be discarded.
52 bool ParseGetHash(const char* chunk_data,
53 size_t chunk_len,
54 base::TimeDelta* cache_lifetime,
55 std::vector<SBFullHashResult>* full_hashes);
57 // Convert prefix hashes into a "HTTP Request for Full-Length Hashes" body.
58 std::string FormatGetHash(const std::vector<SBPrefix>& prefixes);
60 // Format the LIST part of "HTTP Request for Data" body.
61 std::string FormatList(const SBListChunkRanges& list);
63 } // namespace safe_browsing
65 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_