blob: c237f15229f5eb1227c22f7ae07c4ffcbed20844 [file] [log] [blame]
// Copyright (c) 2012 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 CHROME_BROWSER_INTENTS_WEB_INTENTS_REPORTING_H_
#define CHROME_BROWSER_INTENTS_WEB_INTENTS_REPORTING_H_
#include "base/string16.h"
#include "chrome/browser/intents/web_intents_util.h"
#include "webkit/glue/web_intent_reply_data.h"
namespace base {
class TimeDelta;
}
namespace webkit_glue {
struct WebIntentData;
}
namespace web_intents {
// primarily an implementation detail, but declared in this scope
// so they can be used in generating bucket ids
enum TypeId {
TYPE_ID_CUSTOM = 1,
TYPE_ID_APPLICATION,
TYPE_ID_AUDIO,
TYPE_ID_EXAMPLE,
TYPE_ID_IMAGE,
TYPE_ID_MESSAGE,
TYPE_ID_MODEL,
TYPE_ID_MULTIPART,
TYPE_ID_TEXT,
TYPE_ID_VIDEO,
};
#define INTENT_UMA_BUCKET(ACTION, TYPE) \
(ACTION_ID_##ACTION << 8) | TYPE_ID_##TYPE
// NOTE: Adding new values in the middle of a UMA histogram will basically
// mess up reporting. It is then advised that when adding entries here,
// you update the related UMA histogram keys in |web_intents_reporting.cc|.
// If new buckets are added in the middle, please update the ".v#" suffix
// on histogram names in |web_intents_reporting.cc|.
enum UMABucket {
BUCKET_CUSTOM_CUSTOM = INTENT_UMA_BUCKET(CUSTOM, CUSTOM),
BUCKET_CUSTOM_APPLICATION = INTENT_UMA_BUCKET(CUSTOM, APPLICATION),
BUCKET_CUSTOM_AUDIO = INTENT_UMA_BUCKET(CUSTOM, AUDIO),
BUCKET_CUSTOM_EXAMPLE = INTENT_UMA_BUCKET(CUSTOM, EXAMPLE),
BUCKET_CUSTOM_IMAGE = INTENT_UMA_BUCKET(CUSTOM, IMAGE),
BUCKET_CUSTOM_MESSAGE = INTENT_UMA_BUCKET(CUSTOM, MESSAGE),
BUCKET_CUSTOM_MODEL = INTENT_UMA_BUCKET(CUSTOM, MODEL),
BUCKET_CUSTOM_MULTIPART = INTENT_UMA_BUCKET(CUSTOM, MULTIPART),
BUCKET_CUSTOM_TEXT = INTENT_UMA_BUCKET(CUSTOM, TEXT),
BUCKET_CUSTOM_VIDEO = INTENT_UMA_BUCKET(CUSTOM, VIDEO),
BUCKET_EDIT_CUSTOM = INTENT_UMA_BUCKET(EDIT, CUSTOM),
BUCKET_EDIT_APPLICATION = INTENT_UMA_BUCKET(EDIT, APPLICATION),
BUCKET_EDIT_AUDIO = INTENT_UMA_BUCKET(EDIT, AUDIO),
BUCKET_EDIT_EXAMPLE = INTENT_UMA_BUCKET(EDIT, EXAMPLE),
BUCKET_EDIT_IMAGE = INTENT_UMA_BUCKET(EDIT, IMAGE),
BUCKET_EDIT_MESSAGE = INTENT_UMA_BUCKET(EDIT, MESSAGE),
BUCKET_EDIT_MODEL = INTENT_UMA_BUCKET(EDIT, MODEL),
BUCKET_EDIT_MULTIPART = INTENT_UMA_BUCKET(EDIT, MULTIPART),
BUCKET_EDIT_TEXT = INTENT_UMA_BUCKET(EDIT, TEXT),
BUCKET_EDIT_VIDEO = INTENT_UMA_BUCKET(EDIT, VIDEO),
BUCKET_PICK_CUSTOM = INTENT_UMA_BUCKET(PICK, CUSTOM),
BUCKET_PICK_APPLICATION = INTENT_UMA_BUCKET(PICK, APPLICATION),
BUCKET_PICK_AUDIO = INTENT_UMA_BUCKET(PICK, AUDIO),
BUCKET_PICK_EXAMPLE = INTENT_UMA_BUCKET(PICK, EXAMPLE),
BUCKET_PICK_IMAGE = INTENT_UMA_BUCKET(PICK, IMAGE),
BUCKET_PICK_MESSAGE = INTENT_UMA_BUCKET(PICK, MESSAGE),
BUCKET_PICK_MODEL = INTENT_UMA_BUCKET(PICK, MODEL),
BUCKET_PICK_MULTIPART = INTENT_UMA_BUCKET(PICK, MULTIPART),
BUCKET_PICK_TEXT = INTENT_UMA_BUCKET(PICK, TEXT),
BUCKET_PICK_VIDEO = INTENT_UMA_BUCKET(PICK, VIDEO),
BUCKET_SAVE_CUSTOM = INTENT_UMA_BUCKET(SAVE, CUSTOM),
BUCKET_SAVE_APPLICATION = INTENT_UMA_BUCKET(SAVE, APPLICATION),
BUCKET_SAVE_AUDIO = INTENT_UMA_BUCKET(SAVE, AUDIO),
BUCKET_SAVE_EXAMPLE = INTENT_UMA_BUCKET(SAVE, EXAMPLE),
BUCKET_SAVE_IMAGE = INTENT_UMA_BUCKET(SAVE, IMAGE),
BUCKET_SAVE_MESSAGE = INTENT_UMA_BUCKET(SAVE, MESSAGE),
BUCKET_SAVE_MODEL = INTENT_UMA_BUCKET(SAVE, MODEL),
BUCKET_SAVE_MULTIPART = INTENT_UMA_BUCKET(SAVE, MULTIPART),
BUCKET_SAVE_TEXT = INTENT_UMA_BUCKET(SAVE, TEXT),
BUCKET_SAVE_VIDEO = INTENT_UMA_BUCKET(SAVE, VIDEO),
BUCKET_SHARE_CUSTOM = INTENT_UMA_BUCKET(SHARE, CUSTOM),
BUCKET_SHARE_APPLICATION = INTENT_UMA_BUCKET(SHARE, APPLICATION),
BUCKET_SHARE_AUDIO = INTENT_UMA_BUCKET(SHARE, AUDIO),
BUCKET_SHARE_EXAMPLE = INTENT_UMA_BUCKET(SHARE, EXAMPLE),
BUCKET_SHARE_IMAGE = INTENT_UMA_BUCKET(SHARE, IMAGE),
BUCKET_SHARE_MESSAGE = INTENT_UMA_BUCKET(SHARE, MESSAGE),
BUCKET_SHARE_MODEL = INTENT_UMA_BUCKET(SHARE, MODEL),
BUCKET_SHARE_MULTIPART = INTENT_UMA_BUCKET(SHARE, MULTIPART),
BUCKET_SHARE_TEXT = INTENT_UMA_BUCKET(SHARE, TEXT),
BUCKET_SHARE_VIDEO = INTENT_UMA_BUCKET(SHARE, VIDEO),
BUCKET_SUBSCRIBE_CUSTOM = INTENT_UMA_BUCKET(SUBSCRIBE, CUSTOM),
BUCKET_SUBSCRIBE_APPLICATION = INTENT_UMA_BUCKET(SUBSCRIBE, APPLICATION),
BUCKET_SUBSCRIBE_AUDIO = INTENT_UMA_BUCKET(SUBSCRIBE, AUDIO),
BUCKET_SUBSCRIBE_EXAMPLE = INTENT_UMA_BUCKET(SUBSCRIBE, EXAMPLE),
BUCKET_SUBSCRIBE_IMAGE = INTENT_UMA_BUCKET(SUBSCRIBE, IMAGE),
BUCKET_SUBSCRIBE_MESSAGE = INTENT_UMA_BUCKET(SUBSCRIBE, MESSAGE),
BUCKET_SUBSCRIBE_MODEL = INTENT_UMA_BUCKET(SUBSCRIBE, MODEL),
BUCKET_SUBSCRIBE_MULTIPART = INTENT_UMA_BUCKET(SUBSCRIBE, MULTIPART),
BUCKET_SUBSCRIBE_TEXT = INTENT_UMA_BUCKET(SUBSCRIBE, TEXT),
BUCKET_SUBSCRIBE_VIDEO = INTENT_UMA_BUCKET(SUBSCRIBE, VIDEO),
BUCKET_VIEW_CUSTOM = INTENT_UMA_BUCKET(VIEW, CUSTOM),
BUCKET_VIEW_APPLICATION = INTENT_UMA_BUCKET(VIEW, APPLICATION),
BUCKET_VIEW_AUDIO = INTENT_UMA_BUCKET(VIEW, AUDIO),
BUCKET_VIEW_EXAMPLE = INTENT_UMA_BUCKET(VIEW, EXAMPLE),
BUCKET_VIEW_IMAGE = INTENT_UMA_BUCKET(VIEW, IMAGE),
BUCKET_VIEW_MESSAGE = INTENT_UMA_BUCKET(VIEW, MESSAGE),
BUCKET_VIEW_MODEL = INTENT_UMA_BUCKET(VIEW, MODEL),
BUCKET_VIEW_MULTIPART = INTENT_UMA_BUCKET(VIEW, MULTIPART),
BUCKET_VIEW_TEXT = INTENT_UMA_BUCKET(VIEW, TEXT),
BUCKET_VIEW_VIDEO = INTENT_UMA_BUCKET(VIEW, VIDEO),
};
#undef INTENT_UMA_BUCKET
// Please update if new higher values are added to Bucket.
const int kMaxActionTypeHistogramValue = BUCKET_VIEW_VIDEO;
UMABucket ToUMABucket(const string16& action, const string16& type);
void RecordIntentsDispatchDisabled();
void RecordIntentDispatchRequested();
void RecordIntentDispatched(const UMABucket bucket);
// Records the fact that the picker was shown and records the
// number of services installed at the time the picker was shown
void RecordPickerShow(const UMABucket bucket, size_t installed);
void RecordPickerCancel(const UMABucket bucket);
void RecordServiceInvoke(const UMABucket bucket);
// Records the |duration| of time spent in the service. Uses |reply_type| to
// distinguish between failed and successful service usage.
void RecordServiceActiveDuration(
webkit_glue::WebIntentReplyType reply_type,
const base::TimeDelta& duration);
void RecordChooseAnotherService(const UMABucket bucket);
void RecordCWSExtensionInstalled(const UMABucket bucket);
} // namespace web_intents
#endif // CHROME_BROWSER_INTENTS_WEB_INTENTS_REPORTING_H_