Chromium Code Reviews| 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..c492bf941ec9d96404062eafec3e2460ae2089d6 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,9 +129,6 @@ 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|. |
| @@ -150,7 +147,6 @@ 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)); |
| @@ -163,8 +159,7 @@ 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)); |
| 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|. |
| @@ -173,7 +168,6 @@ TEST_F(DataUseUITabModelTest, ReportTabEventsTest) { |
| EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(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)); |
| } |
| @@ -185,7 +179,6 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) { |
| // HasDataUseTrackingStarted 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)); |
| @@ -195,7 +188,6 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) { |
| // HasDataUseTrackingEnded 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)); |
| @@ -203,26 +195,21 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) { |
| // 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)); |
| // The tab exits the tracking state. |
| data_use_tab_model()->NotifyObserversOfTrackingEnding(kFooTabId); |
| - base::RunLoop().RunUntilIdle(); |
| EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(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)); |
| // 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)); |
| @@ -233,12 +220,106 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) { |
| // HasDataUseTrackingStarted/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)); |
| } |
| +// Tests if the Entrance/Exit UI state is tracked correctly. |
| +TEST_F(DataUseUITabModelTest, EntranceExitStateWithDialogBox) { |
|
megjablon
2015/12/29 00:38:24
Maybe name EntraceExitStateForDialog?
tbansal1
2015/12/29 01:18:41
Done.
|
| + 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()->HasDataUseTrackingStarted(foo_tab_id)) |
| + << i; |
| + EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)) |
| + << i; |
| + EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(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()->HasDataUseTrackingEnded(foo_tab_id)) |
| + << i; |
| + EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(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()->HasDataUseTrackingStarted(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()->HasDataUseTrackingEnded(foo_tab_id)) |
| + << i; |
| + } else { |
| + EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id)) |
| + << i; |
| + } |
| + } |
| +} |
| + |
| // Checks if page transition type is converted correctly. |
| TEST_F(DataUseUITabModelTest, ConvertTransitionType) { |
| DataUseTabModel::TransitionType transition_type; |