Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: components/domain_reliability/context.h

Issue 252613002: Domain Reliability: More security review. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef COMPONENTS_DOMAIN_RELIABILITY_CONTEXT_H_ 5 #ifndef COMPONENTS_DOMAIN_RELIABILITY_CONTEXT_H_
6 #define COMPONENTS_DOMAIN_RELIABILITY_CONTEXT_H_ 6 #define COMPONENTS_DOMAIN_RELIABILITY_CONTEXT_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <map> 9 #include <map>
Ryan Sleevi 2014/04/25 01:00:02 IWYU: vector (line 48) DIWYDU: delete map - you do
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
10 10
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
Ryan Sleevi 2014/04/25 01:00:02 IWYU: I don't see any refcounting going on here.
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Whoops. This used to take a URLRequestContextGette
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "components/domain_reliability/beacon.h" 15 #include "components/domain_reliability/beacon.h"
16 #include "components/domain_reliability/config.h" 16 #include "components/domain_reliability/config.h"
Ryan Sleevi 2014/04/25 01:00:02 Normally you'd be able to forward declare this, if
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Are you saying I should rearrange it so I can?
17 #include "components/domain_reliability/domain_reliability_export.h" 17 #include "components/domain_reliability/domain_reliability_export.h"
18 #include "components/domain_reliability/scheduler.h" 18 #include "components/domain_reliability/scheduler.h"
19 #include "components/domain_reliability/uploader.h" 19 #include "components/domain_reliability/uploader.h"
20 #include "components/domain_reliability/util.h" 20 #include "components/domain_reliability/util.h"
21 21
22 class GURL; 22 class GURL;
23 23
24 namespace domain_reliability { 24 namespace domain_reliability {
25 25
26 class DomainReliabilityDispatcher; 26 class DomainReliabilityDispatcher;
27 class MockableTime; 27 class MockableTime;
28 28
29 // The per-domain context for the Domain Reliability client; includes the 29 // The per-domain context for the Domain Reliability client; includes the
30 // domain's config and per-resource beacon queues. 30 // domain's config and per-resource beacon queues.
31 class DOMAIN_RELIABILITY_EXPORT DomainReliabilityContext { 31 class DOMAIN_RELIABILITY_EXPORT DomainReliabilityContext {
32 public: 32 public:
33 DomainReliabilityContext( 33 DomainReliabilityContext(
34 MockableTime* time, 34 MockableTime* time,
Ryan Sleevi 2014/04/25 01:00:02 nit: Should "MockableTime" be called what it is, r
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Yeah, we might be able to come up with a nicer nam
35 const DomainReliabilityScheduler::Params& scheduler_params, 35 const DomainReliabilityScheduler::Params& scheduler_params,
36 DomainReliabilityDispatcher* dispatcher, 36 DomainReliabilityDispatcher* dispatcher,
37 DomainReliabilityUploader* uploader, 37 DomainReliabilityUploader* uploader,
38 scoped_ptr<const DomainReliabilityConfig> config); 38 scoped_ptr<const DomainReliabilityConfig> config);
39 virtual ~DomainReliabilityContext(); 39 virtual ~DomainReliabilityContext();
Ryan Sleevi 2014/04/25 01:00:02 Why is this virtual, when you have no virtual meth
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
40 40
41 // Adds a beacon; may or may not save the actual beacon to be uploaded,
42 // depending on the sample rates in the config, but will increment one of
43 // the request counters in any case.
Ryan Sleevi 2014/04/25 01:00:02 Should this be called "RegisterBeacon" instead? Or
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Yeah, I've never been happy with this name. I thin
41 void AddBeacon(const DomainReliabilityBeacon& beacon, const GURL& url); 44 void AddBeacon(const DomainReliabilityBeacon& beacon, const GURL& url);
42 45
43 void GetQueuedDataForTesting( 46 void GetQueuedDataForTesting(
44 int resource_index, 47 int resource_index,
45 std::vector<DomainReliabilityBeacon>* beacons_out, 48 std::vector<DomainReliabilityBeacon>* beacons_out,
46 int* successful_requests_out, 49 int* successful_requests_out,
47 int* failed_requests_out) const; 50 int* failed_requests_out) const;
Ryan Sleevi 2014/04/25 01:00:02 For "counts of things" and indices, use unsigned i
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
48 51
49 const DomainReliabilityConfig& config() { return *config_.get(); } 52 const DomainReliabilityConfig& config() { return *config_.get(); }
50 53
51 // Maximum number of beacons queued per context; if more than this many are 54 // Maximum number of beacons queued per context; if more than this many are
52 // queued; the oldest beacons will be removed. 55 // queued; the oldest beacons will be removed.
53 static const int kMaxQueuedBeacons; 56 static const int kMaxQueuedBeacons;
Ryan Sleevi 2014/04/25 01:00:02 For "counts of things", use unsigned integer types
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
54 57
55 private: 58 private:
56 // Resource-specific state (queued beacons and request counts). 59 // Resource-specific state (queued beacons and request counts).
57 class ResourceState { 60 class ResourceState {
Ryan Sleevi 2014/04/25 01:00:02 Because you the ScopedVector<> isn't instantiated
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
58 public: 61 public:
59 ResourceState(DomainReliabilityContext* context, 62 ResourceState(DomainReliabilityContext* context,
60 const DomainReliabilityConfig::Resource* config); 63 const DomainReliabilityConfig::Resource* config);
61 ~ResourceState(); 64 ~ResourceState();
62 65
63 scoped_ptr<base::Value> ToValue(base::TimeTicks upload_time) const; 66 scoped_ptr<base::Value> ToValue(base::TimeTicks upload_time) const;
64 67
65 // Remembers the current state of the resource data when an upload starts. 68 // Remembers the current state of the resource data when an upload starts.
66 void MarkUpload(); 69 void MarkUpload();
67 70
68 // Uses the state remembered by |MarkUpload| to remove successfully uploaded 71 // Uses the state remembered by |MarkUpload| to remove successfully uploaded
69 // data but keep beacons and request counts added after the upload started. 72 // data but keep beacons and request counts added after the upload started.
70 void CommitUpload(); 73 void CommitUpload();
71 74
72 // Gets the start time of the oldest beacon, if there are any. Returns true 75 // Gets the start time of the oldest beacon, if there are any. Returns true
73 // and sets |oldest_start_out| if so; otherwise, returns false. 76 // and sets |oldest_start_out| if so; otherwise, returns false.
74 bool GetOldestBeaconStart(base::TimeTicks* oldest_start_out) const; 77 bool GetOldestBeaconStart(base::TimeTicks* oldest_start_out) const;
75 // Removes the oldest beacon. DCHECKs if there isn't one. 78 // Removes the oldest beacon. DCHECKs if there isn't one.
Ryan Sleevi 2014/04/25 01:00:02 nit: newline between 77/78.
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
76 void RemoveOldestBeacon(); 79 void RemoveOldestBeacon();
77 80
78 DomainReliabilityContext* context; 81 DomainReliabilityContext* context;
79 const DomainReliabilityConfig::Resource* config; 82 const DomainReliabilityConfig::Resource* config;
80 83
81 std::deque<DomainReliabilityBeacon> beacons; 84 std::deque<DomainReliabilityBeacon> beacons;
82 int successful_requests; 85 int successful_requests;
83 int failed_requests; 86 int failed_requests;
84 87
85 // State saved during uploads; if an upload succeeds, these are used to 88 // State saved during uploads; if an upload succeeds, these are used to
86 // remove uploaded data from the beacon list and request counters. 89 // remove uploaded data from the beacon list and request counters.
87 size_t uploading_beacons_size; 90 size_t uploading_beacons_size;
88 int uploading_successful_requests; 91 int uploading_successful_requests;
89 int uploading_failed_requests; 92 int uploading_failed_requests;
Ryan Sleevi 2014/04/25 01:00:02 size_t for 85, 86, 91, 92
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
90 93
91 private: 94 private:
92 DISALLOW_COPY_AND_ASSIGN(ResourceState); 95 DISALLOW_COPY_AND_ASSIGN(ResourceState);
93 }; 96 };
94 97
95 typedef ScopedVector<ResourceState> ResourceStateVector; 98 typedef ScopedVector<ResourceState> ResourceStateVector;
96 typedef ResourceStateVector::const_iterator ResourceStateIterator; 99 typedef ResourceStateVector::const_iterator ResourceStateIterator;
97 100
98 void InitializeResourceStates(); 101 void InitializeResourceStates();
99 void ScheduleUpload(base::TimeDelta min_delay, base::TimeDelta max_delay); 102 void ScheduleUpload(base::TimeDelta min_delay, base::TimeDelta max_delay);
100 void StartUpload(); 103 void StartUpload();
101 void OnUploadComplete(bool success); 104 void OnUploadComplete(bool success);
102 105
103 scoped_ptr<const base::Value> CreateReport(base::TimeTicks upload_time) const; 106 scoped_ptr<const base::Value> CreateReport(base::TimeTicks upload_time) const;
104 107
105 // Remembers the current state of the context when an upload starts. 108 // Remembers the current state of the context when an upload starts.
106 void MarkUpload(); 109 void MarkUpload();
107 110
108 // Uses the state remembered by |MarkUpload| to remove successfully uploaded 111 // Uses the state remembered by |MarkUpload| to remove successfully uploaded
109 // data but keep beacons and request counts added after the upload started. 112 // data but keep beacons and request counts added after the upload started.
110 void CommitUpload(); 113 void CommitUpload();
111 114
112 // Finds and removes the oldest beacon. DCHECKs if there is none. (Called 115 // Finds and removes the oldest beacon. DCHECKs if there is none. (Called
113 // when there are too many beacons queued.) 116 // when there are too many beacons queued.)
114 void RemoveOldestBeacon(); 117 void RemoveOldestBeacon();
Ryan Sleevi 2014/04/25 01:00:02 I find it weird to see 108-117 duplicated with eff
Deprecated (see juliatuttle) 2014/04/28 22:01:13 If you want, I can just have Context::MarkUpload m
115 118
116 scoped_ptr<const DomainReliabilityConfig> config_; 119 scoped_ptr<const DomainReliabilityConfig> config_;
117 MockableTime* time_; 120 MockableTime* time_;
118 DomainReliabilityScheduler scheduler_; 121 DomainReliabilityScheduler scheduler_;
119 DomainReliabilityDispatcher* dispatcher_; 122 DomainReliabilityDispatcher* dispatcher_;
120 DomainReliabilityUploader* uploader_; 123 DomainReliabilityUploader* uploader_;
121 124
122 // Each ResourceState in |states_| corresponds to the Resource of the same 125 // Each ResourceState in |states_| corresponds to the Resource of the same
123 // index in the config. 126 // index in the config.
124 ResourceStateVector states_; 127 ResourceStateVector states_;
125 int beacon_count_; 128 int beacon_count_;
126 int uploading_beacon_count_; 129 int uploading_beacon_count_;
Ryan Sleevi 2014/04/25 01:00:02 size_t for counts
Deprecated (see juliatuttle) 2014/04/28 22:01:13 Done.
127 base::TimeTicks upload_time_; 130 base::TimeTicks upload_time_;
128 base::TimeTicks last_upload_time_; 131 base::TimeTicks last_upload_time_;
129 132
130 base::WeakPtrFactory<DomainReliabilityContext> weak_factory_; 133 base::WeakPtrFactory<DomainReliabilityContext> weak_factory_;
131 134
132 DISALLOW_COPY_AND_ASSIGN(DomainReliabilityContext); 135 DISALLOW_COPY_AND_ASSIGN(DomainReliabilityContext);
133 }; 136 };
134 137
135 } // namespace domain_reliability 138 } // namespace domain_reliability
136 139
137 #endif // COMPONENTS_DOMAIN_RELIABILITY_CONTEXT_H_ 140 #endif // COMPONENTS_DOMAIN_RELIABILITY_CONTEXT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698