blob: 28584e0f14d95fead374525df7ec789f5b348cb7 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_EVENT_STORE_H_
#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_EVENT_STORE_H_
#include <stdint.h>
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_storage_delegate.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h"
namespace base {
class DictionaryValue;
class Value;
}
namespace data_reduction_proxy {
class DataReductionProxyEventStore
: public DataReductionProxyEventStorageDelegate {
public:
// Adds data reduction proxy specific constants to the net_internals
// constants dictionary.
static void AddConstants(base::DictionaryValue* constants_dict);
// Constructs a DataReductionProxyEventStore object.
DataReductionProxyEventStore();
virtual ~DataReductionProxyEventStore();
// Creates a Value summary of Data Reduction Proxy related information:
// - Whether the proxy is enabled,
// - The proxy configuration,
// - The state of the last secure proxy check response,
// - A stream of the last Data Reduction Proxy related events.
std::unique_ptr<base::DictionaryValue> GetSummaryValue() const;
// Adds DATA_REDUCTION_PROXY event with no parameters to the event store.
void AddEvent(std::unique_ptr<base::Value> event) override;
// Override of DataReductionProxyEventStorageDelegate.
// Adds |entry| to the event store and sets |current_configuration_|.
void AddEnabledEvent(std::unique_ptr<base::Value> entry,
bool enabled) override;
// Override of DataReductionProxyEventStorageDelegate.
// Adds |entry| to the event store and sets |secure_proxy_check_state_|.
void AddEventAndSecureProxyCheckState(std::unique_ptr<base::Value> entry,
SecureProxyCheckState state) override;
// Override of DataReductionProxyEventStorageDelegate.
// Adds |entry| to the event store and sets |last_bypass_event_| and
// |expiration_ticks_|.
void AddAndSetLastBypassEvent(std::unique_ptr<base::Value> entry,
int64_t expiration_ticks) override;
// Returns the list of proxy servers for HTTP origins.
std::string GetHttpProxyList() const;
// Returns a sanitized version of the last seen bypass event.
std::string SanitizedLastBypassEvent() const;
private:
friend class DataReductionProxyEventStoreTest;
// A vector of data reduction proxy related events. It is used as a circular
// buffer to prevent unbounded memory utilization.
std::vector<std::unique_ptr<base::Value>> stored_events_;
// The index of the oldest event in |stored_events_|.
size_t oldest_event_index_;
// Whether the data reduction proxy is enabled or not.
bool enabled_;
// The current data reduction proxy configuration.
std::unique_ptr<base::Value> current_configuration_;
// The state based on the last secure proxy check.
SecureProxyCheckState secure_proxy_check_state_;
// The last seen data reduction proxy bypass event.
std::unique_ptr<base::Value> last_bypass_event_;
// The expiration time of the |last_bypass_event_|.
int64_t expiration_ticks_;
// Enforce usage on the UI thread.
base::ThreadChecker thread_checker_;
DISALLOW_COPY_AND_ASSIGN(DataReductionProxyEventStore);
};
} // namespace data_reduction_proxy
#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_EVENT_STORE_H_