Index: chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc |
diff --git a/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc b/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc |
index d1a73f44d700457dfd67aaea854cb13dcbde4f78..63987a738e2df495153bc9bd14e6c12e396a9609 100644 |
--- a/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc |
+++ b/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc |
@@ -30,6 +30,9 @@ namespace android { |
namespace { |
+const char kFooLabel[] = "foo_label"; |
+const char kFooPackage[] = "com.foo"; |
+ |
class TestDataUseTabModel : public DataUseTabModel { |
public: |
TestDataUseTabModel() {} |
@@ -96,9 +99,6 @@ class DataUseUITabModelTest : public testing::Test { |
// Tests that DataUseTabModel is notified of tab closure and navigation events, |
// and DataUseTabModel notifies DataUseUITabModel. |
TEST_F(DataUseUITabModelTest, ReportTabEventsTest) { |
- const char kFooLabel[] = "foo_label"; |
- const char kFooPackage[] = "com.foo"; |
- |
std::vector<std::string> url_regexes; |
url_regexes.push_back( |
"http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*"); |
@@ -129,18 +129,18 @@ TEST_F(DataUseUITabModelTest, ReportTabEventsTest) { |
data_use_ui_tab_model()->ReportBrowserNavigation( |
GURL("https://www.foo.com/#q=abc"), tests[i].transition_type, |
foo_tab_id); |
- // Wait for DataUseUITabModel to notify DataUseTabModel, which should notify |
- // DataUseUITabModel back. |
- base::RunLoop().RunUntilIdle(); |
// |data_use_ui_tab_model| should receive callback about starting of |
// tracking of data usage for |foo_tab_id|. |
EXPECT_EQ(!tests[i].expected_label.empty(), |
- data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)) |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted( |
+ foo_tab_id)) |
<< i; |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)) |
+ EXPECT_FALSE(data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted( |
+ foo_tab_id)) |
<< i; |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id)) |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(foo_tab_id)) |
<< i; |
std::string got_label; |
@@ -150,10 +150,10 @@ TEST_F(DataUseUITabModelTest, ReportTabEventsTest) { |
// Report closure of tab. |
data_use_ui_tab_model()->ReportTabClosure(foo_tab_id); |
- base::RunLoop().RunUntilIdle(); |
// DataUse object should not be labeled. |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(foo_tab_id)); |
data_use_tab_model()->GetLabelForTabAtTime( |
foo_tab_id, base::TimeTicks::Now() + base::TimeDelta::FromMinutes(10), |
&got_label); |
@@ -161,20 +161,23 @@ TEST_F(DataUseUITabModelTest, ReportTabEventsTest) { |
} |
const SessionID::id_type bar_tab_id = foo_tab_id + 1; |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(bar_tab_id)); |
data_use_ui_tab_model()->ReportCustomTabInitialNavigation( |
- bar_tab_id, std::string(), kFooPackage); |
- base::RunLoop().RunUntilIdle(); |
+ bar_tab_id, kFooPackage, std::string()); |
// |data_use_ui_tab_model| should receive callback about starting of |
// tracking of data usage for |bar_tab_id|. |
- EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id)); |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(bar_tab_id)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(bar_tab_id)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(bar_tab_id)); |
data_use_ui_tab_model()->ReportTabClosure(bar_tab_id); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(bar_tab_id)); |
} |
// Tests if the Entrance/Exit UI state is tracked correctly. |
@@ -183,60 +186,176 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) { |
const SessionID::id_type kBarTabId = 2; |
const SessionID::id_type kBazTabId = 3; |
- // HasDataUseTrackingStarted should return true only once. |
+ // CheckAndResetDataUseTrackingStarted should return true only once. |
data_use_tab_model()->NotifyObserversOfTrackingStarting(kFooTabId); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kFooTabId)); |
- |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kBarTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kBarTabId)); |
- |
- // HasDataUseTrackingEnded should return true only once. |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kFooTabId)); |
+ |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kBarTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kBarTabId)); |
+ |
+ // CheckAndResetDataUseTrackingEnded should return true only once. |
data_use_tab_model()->NotifyObserversOfTrackingEnding(kFooTabId); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
- EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kFooTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kFooTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
// The tab enters the tracking state again. |
data_use_tab_model()->NotifyObserversOfTrackingStarting(kFooTabId); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
// The tab exits the tracking state. |
data_use_tab_model()->NotifyObserversOfTrackingEnding(kFooTabId); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
// The tab enters the tracking state again. |
data_use_tab_model()->NotifyObserversOfTrackingStarting(kFooTabId); |
- base::RunLoop().RunUntilIdle(); |
data_use_tab_model()->NotifyObserversOfTrackingStarting(kFooTabId); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kFooTabId)); |
// ShowExit should return true only once. |
data_use_tab_model()->NotifyObserversOfTrackingEnding(kBarTabId); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kBarTabId)); |
- EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kBarTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kBarTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kBarTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kBarTabId)); |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kBarTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kBarTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kBarTabId)); |
data_use_ui_tab_model()->ReportTabClosure(kFooTabId); |
data_use_ui_tab_model()->ReportTabClosure(kBarTabId); |
- // HasDataUseTrackingStarted/Ended should return false for closed tabs. |
+ // CheckAndResetDataUseTrackingStarted/Ended should return false for closed |
+ // tabs. |
data_use_tab_model()->NotifyObserversOfTrackingStarting(kBazTabId); |
- base::RunLoop().RunUntilIdle(); |
data_use_ui_tab_model()->ReportTabClosure(kBazTabId); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(kBazTabId)); |
- EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(kBazTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted(kBazTabId)); |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(kBazTabId)); |
+} |
+ |
+// Tests if the Entrance/Exit UI state is tracked correctly. |
+TEST_F(DataUseUITabModelTest, EntraceExitStateForDialog) { |
+ const SessionID::id_type kFooTabId = 1; |
+ |
+ std::vector<std::string> url_regexes; |
+ url_regexes.push_back( |
+ "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*"); |
+ RegisterURLRegexes(std::vector<std::string>(url_regexes.size(), kFooPackage), |
+ url_regexes, |
+ std::vector<std::string>(url_regexes.size(), kFooLabel)); |
+ |
+ SessionID::id_type foo_tab_id = kFooTabId; |
+ |
+ const struct { |
+ // True if a dialog box was shown to the user. It may not be shown if the |
+ // user has previously selected the option to opt out. |
+ bool continue_dialog_box_shown; |
+ bool user_proceeded_with_navigation; |
+ } tests[] = { |
+ {false, false}, {true, true}, {true, false}, |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(tests); ++i) { |
+ // Start a new tab. |
+ ++foo_tab_id; |
+ data_use_ui_tab_model()->ReportBrowserNavigation( |
+ GURL("https://www.foo.com/#q=abc"), ui::PAGE_TRANSITION_GENERATED, |
+ foo_tab_id); |
+ |
+ // |data_use_ui_tab_model| should receive callback about starting of |
+ // tracking of data usage for |foo_tab_id|. |
+ EXPECT_TRUE(data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted( |
+ foo_tab_id)) |
+ << i; |
+ EXPECT_FALSE(data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted( |
+ foo_tab_id)) |
+ << i; |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(foo_tab_id)) |
+ << i; |
+ |
+ std::string got_label; |
+ data_use_tab_model()->GetLabelForTabAtTime( |
+ foo_tab_id, base::TimeTicks::Now(), &got_label); |
+ EXPECT_EQ(kFooLabel, got_label) << i; |
+ |
+ // Tab enters non-tracking state. |
+ data_use_ui_tab_model()->ReportBrowserNavigation( |
+ GURL("https://www.bar.com/#q=abc"), |
+ ui::PageTransition::PAGE_TRANSITION_TYPED, foo_tab_id); |
+ |
+ EXPECT_TRUE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(foo_tab_id)) |
+ << i; |
+ EXPECT_FALSE( |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded(foo_tab_id)) |
+ << i; |
+ |
+ // Tab enters tracking state. |
+ data_use_ui_tab_model()->ReportBrowserNavigation( |
+ GURL("https://www.foo.com/#q=abc"), ui::PAGE_TRANSITION_GENERATED, |
+ foo_tab_id); |
+ |
+ EXPECT_TRUE(data_use_ui_tab_model()->CheckAndResetDataUseTrackingStarted( |
+ foo_tab_id)) |
+ << i; |
+ |
+ // Tab may enter non-tracking state. |
+ EXPECT_TRUE(data_use_ui_tab_model()->WouldDataUseTrackingEnd( |
+ "https://www.bar.com/#q=abc", ui::PageTransition::PAGE_TRANSITION_TYPED, |
+ foo_tab_id)); |
+ if (tests[i].continue_dialog_box_shown && |
+ tests[i].user_proceeded_with_navigation) { |
+ data_use_ui_tab_model()->UserClickedContinueOnDialogBox(foo_tab_id); |
+ } |
+ |
+ if (tests[i].user_proceeded_with_navigation) { |
+ data_use_ui_tab_model()->ReportBrowserNavigation( |
+ GURL("https://www.bar.com/#q=abc"), |
+ ui::PageTransition::PAGE_TRANSITION_TYPED, foo_tab_id); |
+ } |
+ |
+ const std::string expected_label = |
+ tests[i].user_proceeded_with_navigation ? "" : kFooLabel; |
+ data_use_tab_model()->GetLabelForTabAtTime( |
+ foo_tab_id, base::TimeTicks::Now(), &got_label); |
+ EXPECT_EQ(expected_label, got_label) << i; |
+ |
+ if (tests[i].user_proceeded_with_navigation) { |
+ // No UI element should be shown afterwards if the dialog box was shown |
+ // before. |
+ EXPECT_NE(tests[i].continue_dialog_box_shown, |
+ data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded( |
+ foo_tab_id)) |
+ << i; |
+ } else { |
+ EXPECT_FALSE(data_use_ui_tab_model()->CheckAndResetDataUseTrackingEnded( |
+ foo_tab_id)) |
+ << i; |
+ } |
+ } |
} |
// Checks if page transition type is converted correctly. |