Commit a14701de authored by Caroline Rising's avatar Caroline Rising Committed by Commit Bot

Add two additional flag options for a user study on the tab hover cards feature.

A user study is planned to gather opinions of trigger delay timings for tab hover cards. This cl adds "Enabled B" and "Enabled C" flag options that correspond to different delay times. This will be removed after the study ends.

Bug: 910739
Change-Id: I0c29cb18d653c8dbf661d6c6372309b270308d94
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1524530Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarPeter Boström <pbos@chromium.org>
Commit-Queue: Caroline Rising <corising@chromium.org>
Cr-Commit-Position: refs/heads/master@{#641705}
parent 1e54a806
......@@ -873,6 +873,16 @@ const FeatureEntry::FeatureParam kMarkHttpAsWarningAndDangerousOnFormEdits[] = {
security_state::features::
kMarkHttpAsParameterWarningAndDangerousOnFormEdits}};
// The "Enabled" state for this feature is "0" and representing setting A.
const FeatureEntry::FeatureParam kTabHoverCardsSettingB[] = {
{features::kTabHoverCardsFeatureParameterName, "1"}};
const FeatureEntry::FeatureParam kTabHoverCardsSettingC[] = {
{features::kTabHoverCardsFeatureParameterName, "2"}};
const FeatureEntry::FeatureVariation kTabHoverCardsFeatureVariations[] = {
{"B", kTabHoverCardsSettingB, base::size(kTabHoverCardsSettingB), nullptr},
{"C", kTabHoverCardsSettingC, base::size(kTabHoverCardsSettingC), nullptr}};
const FeatureEntry::FeatureVariation kMarkHttpAsFeatureVariations[] = {
{"(mark as actively dangerous)", kMarkHttpAsDangerous,
base::size(kMarkHttpAsDangerous), nullptr},
......@@ -3120,7 +3130,9 @@ const FeatureEntry kFeatureEntries[] = {
{"tab-hover-cards", flag_descriptions::kTabHoverCardsName,
flag_descriptions::kTabHoverCardsDescription, kOsDesktop,
FEATURE_VALUE_TYPE(features::kTabHoverCards)},
FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabHoverCards,
kTabHoverCardsFeatureVariations,
"TabHoverCards")},
{"tab-hover-card-images", flag_descriptions::kTabHoverCardImagesName,
flag_descriptions::kTabHoverCardImagesDescription, kOsDesktop,
......
......@@ -33,6 +33,9 @@ const base::Feature kTabGroups{"TabGroups", base::FEATURE_DISABLED_BY_DEFAULT};
// https://crbug.com/910739
const base::Feature kTabHoverCards{"TabHoverCards",
base::FEATURE_DISABLED_BY_DEFAULT};
// Parameter name used for tab hover cards user study.
// TODO(corising): Removed this after tab hover cards user study.
const char kTabHoverCardsFeatureParameterName[] = "setting";
// Enables preview images in hover cards. See kTabHoverCards.
// https://crbug.com/928954
......
......@@ -27,6 +27,7 @@ extern const base::Feature kWebUIDarkMode;
extern const base::Feature kTabGroups;
extern const base::Feature kTabHoverCards;
extern const char kTabHoverCardsFeatureParameterName[];
extern const base::Feature kTabHoverCardImages;
......
......@@ -7,6 +7,7 @@
#include <algorithm>
#include <memory>
#include "base/metrics/field_trial_params.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_features.h"
#include "chrome/browser/ui/tabs/tab_style.h"
......@@ -25,11 +26,6 @@
namespace {
constexpr base::TimeDelta kMinimumTriggerDelay =
base::TimeDelta::FromMilliseconds(50);
constexpr base::TimeDelta kMaximumTriggerDelay =
base::TimeDelta::FromMilliseconds(1000);
// Hover card and preview image dimensions.
int GetPreferredTabHoverCardWidth() {
return TabStyle::GetStandardWidth();
......@@ -45,6 +41,39 @@ bool AreHoverCardImagesEnabled() {
return base::FeatureList::IsEnabled(features::kTabHoverCardImages);
}
// Get delay threshold based on flag settings option selected. This is for
// user testing.
// TODO(corising): remove this after user study is completed.
base::TimeDelta GetMinimumTriggerDelay() {
int delay_group = base::GetFieldTrialParamByFeatureAsInt(
features::kTabHoverCards, features::kTabHoverCardsFeatureParameterName,
0);
switch (delay_group) {
case 2:
return base::TimeDelta::FromMilliseconds(500);
case 1:
return base::TimeDelta::FromMilliseconds(200);
case 0:
default:
return base::TimeDelta::FromMilliseconds(0);
}
}
base::TimeDelta GetMaximumTriggerDelay() {
int delay_group = base::GetFieldTrialParamByFeatureAsInt(
features::kTabHoverCards, features::kTabHoverCardsFeatureParameterName,
0);
switch (delay_group) {
case 2:
return base::TimeDelta::FromMilliseconds(1000);
case 1:
return base::TimeDelta::FromMilliseconds(700);
case 0:
default:
return base::TimeDelta::FromMilliseconds(0);
}
}
} // namespace
TabHoverCardBubbleView::TabHoverCardBubbleView(Tab* tab)
......@@ -142,14 +171,17 @@ base::TimeDelta TabHoverCardBubbleView::GetDelay(int tab_width) const {
// |___________________________________________ tab width
// | |
// pinned tab width standard tab width
base::TimeDelta minimum_trigger_delay = GetMinimumTriggerDelay();
if (tab_width < TabStyle::GetPinnedWidth())
return kMinimumTriggerDelay;
return minimum_trigger_delay;
base::TimeDelta maximum_trigger_delay = GetMaximumTriggerDelay();
double logarithmic_fraction =
std::log(tab_width - TabStyle::GetPinnedWidth() + 1) /
std::log(TabStyle::GetStandardWidth() - TabStyle::GetPinnedWidth() + 1);
base::TimeDelta scaling_factor = kMaximumTriggerDelay - kMinimumTriggerDelay;
base::TimeDelta scaling_factor =
maximum_trigger_delay - minimum_trigger_delay;
base::TimeDelta delay =
logarithmic_fraction * scaling_factor + kMinimumTriggerDelay;
logarithmic_fraction * scaling_factor + minimum_trigger_delay;
return delay;
}
......
......@@ -36,13 +36,6 @@ class TabHoverCardBubbleView : public views::BubbleDialogDelegateView {
private:
friend class TabHoverCardBubbleViewBrowserTest;
base::OneShotTimer delayed_show_timer_;
views::Widget* widget_ = nullptr;
views::Label* title_label_;
views::Label* domain_label_;
views::ImageView* preview_image_ = nullptr;
// Get delay in milliseconds based on tab width.
base::TimeDelta GetDelay(int tab_width) const;
......@@ -52,6 +45,15 @@ class TabHoverCardBubbleView : public views::BubbleDialogDelegateView {
void UpdateCardContent(TabRendererData data);
gfx::Size CalculatePreferredSize() const override;
base::OneShotTimer delayed_show_timer_;
views::Widget* widget_ = nullptr;
views::Label* title_label_ = nullptr;
views::Label* domain_label_ = nullptr;
views::ImageView* preview_image_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(TabHoverCardBubbleView);
};
#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_HOVER_CARD_BUBBLE_VIEW_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment