blob: 99ba656b67b815f65ab0f3cff5ccff7991bcc729 [file] [log] [blame]
// Copyright 2015 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_USE_MEASUREMENT_CORE_DATA_USE_USER_DATA_H_
#define COMPONENTS_DATA_USE_MEASUREMENT_CORE_DATA_USE_USER_DATA_H_
#include <string>
#include "base/macros.h"
#include "base/supports_user_data.h"
namespace net {
class URLFetcher;
}
namespace data_use_measurement {
// Used to annotate URLRequests with the service name if the URLRequest is used
// by a service.
class DataUseUserData : public base::SupportsUserData::Data {
public:
// This enum should be synced with DataUseServices enum in histograms.xml.
// Please keep them synced after any updates. Also add service name to
// GetServiceNameAsString function.
enum ServiceName {
NOT_TAGGED,
SUGGESTIONS,
TRANSLATE,
SYNC,
OMNIBOX,
INVALIDATION,
RAPPOR,
VARIATIONS,
UMA,
DOMAIN_RELIABILITY,
PROFILE_DOWNLOADER,
GOOGLE_URL_TRACKER,
AUTOFILL,
POLICY,
SPELL_CHECKER,
NTP_SNIPPETS,
SAFE_BROWSING,
DATA_REDUCTION_PROXY,
PRECACHE,
NTP_TILES,
FEEDBACK_UPLOADER,
TRACING_UPLOADER,
DOM_DISTILLER,
CLOUD_PRINT,
SEARCH_PROVIDER_LOGOS,
UPDATE_CLIENT,
};
// Data use broken by content type. This enum must remain synchronized
// with the enum of the same name in metrics/histograms/histograms.xml.
// These values are written to logs. New enum values can be added, but
// existing enums must never be renumbered or deleted and reused.
enum DataUseContentType {
OTHER = 0,
MAIN_FRAME_HTML = 1,
NON_MAIN_FRAME_HTML = 2,
CSS = 3,
IMAGE = 4,
JAVASCRIPT = 5,
FONT = 6,
AUDIO_APPBACKGROUND = 7,
AUDIO_TABBACKGROUND = 8,
AUDIO = 9,
VIDEO_APPBACKGROUND = 10,
VIDEO_TABBACKGROUND = 11,
VIDEO = 12,
TYPE_MAX = 13,
};
// The state of the application. Only available on Android and on other
// platforms it is always FOREGROUND.
enum AppState { UNKNOWN, BACKGROUND, FOREGROUND };
DataUseUserData(ServiceName service_name, AppState app_state);
~DataUseUserData() override;
// Helper function to create DataUseUserData. The caller takes the ownership
// of the returned object.
static base::SupportsUserData::Data* Create(
DataUseUserData::ServiceName service);
// Return the service name of the ServiceName enum.
static std::string GetServiceNameAsString(ServiceName service);
// Services should use this function to attach their |service_name| to the
// URLFetcher serving them.
static void AttachToFetcher(net::URLFetcher* fetcher,
ServiceName service_name);
ServiceName service_name() const { return service_name_; }
AppState app_state() const { return app_state_; }
void set_app_state(AppState app_state) { app_state_ = app_state; }
DataUseContentType content_type() { return content_type_; }
void set_content_type(DataUseContentType content_type) {
content_type_ = content_type;
}
// The key for retrieving back this type of user data.
static const void* const kUserDataKey;
private:
const ServiceName service_name_;
// App state when network access was performed for the request previously.
AppState app_state_;
DataUseContentType content_type_;
DISALLOW_COPY_AND_ASSIGN(DataUseUserData);
};
} // namespace data_use_measurement
#endif // COMPONENTS_DATA_USE_MEASUREMENT_CORE_DATA_USE_USER_DATA_H_