Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2779)

Unified Diff: chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc

Issue 1443683002: Notify DataUseTabModel of navigations and tab closures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments, Using two weak ptrs now. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 47ddf55444ea5b18cb57b01085df9b15cdd23616..84796e7ead3e0df14f7878d0033840f845c54d8b 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
@@ -6,10 +6,18 @@
#include <stdint.h>
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "chrome/browser/android/data_usage/data_use_tab_model.h"
#include "chrome/browser/android/data_usage/data_use_ui_tab_model_factory.h"
+#include "chrome/browser/android/data_usage/external_data_use_observer.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_tab_helper.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/data_usage/core/data_use_aggregator.h"
+#include "components/data_usage/core/data_use_amortizer.h"
+#include "components/data_usage/core/data_use_annotator.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
@@ -21,6 +29,21 @@ namespace chrome {
namespace android {
+class DataUseTabModelTest : public DataUseTabModel {
sclittle 2015/11/16 23:13:43 nit: Name this TestDataUseTabModel, so that it isn
tbansal1 2015/11/17 21:12:33 Done.
+ public:
+ DataUseTabModelTest(ExternalDataUseObserver* external_data_use_observer,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_)
+ : DataUseTabModel(external_data_use_observer, task_runner_.get()),
+ weak_factory_(this) {}
+
+ base::WeakPtr<DataUseTabModelTest> GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+ }
+
+ private:
+ base::WeakPtrFactory<DataUseTabModelTest> weak_factory_;
+};
+
class DataUseUITabModelTest : public ChromeRenderViewHostTestHarness {
public:
using ChromeRenderViewHostTestHarness::web_contents;
@@ -31,15 +54,100 @@ class DataUseUITabModelTest : public ChromeRenderViewHostTestHarness {
}
};
-// Tests that DataUseTabModel is notified of tab closure and navigation events.
+// Tests that DataUseTabModel is notified of tab closure and navigation events,
+// and DataUseTabModel notifies DataUseUITabModel.
TEST_F(DataUseUITabModelTest, ReportTabEventsTest) {
- data_use_ui_tab_model()->ReportBrowserNavigation(
- GURL("https://www.example.com"),
- ui::PageTransition::PAGE_TRANSITION_TYPED,
- SessionTabHelper::IdForTab(web_contents()));
- data_use_ui_tab_model()->ReportTabClosure(
- SessionTabHelper::IdForTab(web_contents()));
- // TODO(tbansal): Test that DataUseTabModel is notified.
+ std::string foo_label("foo_label");
+
+ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner =
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::IO);
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner =
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::UI);
+
+ scoped_ptr<data_usage::DataUseAggregator> data_use_aggregator(
sclittle 2015/11/16 23:13:42 nit: This doesn't have to be a scoped_ptr, this co
tbansal1 2015/11/17 21:12:33 Done.
+ new data_usage::DataUseAggregator(
+ scoped_ptr<data_usage::DataUseAnnotator>(),
+ scoped_ptr<data_usage::DataUseAmortizer>()));
+
+ scoped_ptr<ExternalDataUseObserver> external_data_use_observer(
sclittle 2015/11/16 23:13:43 nit: same here, this doesn't need to be a scoped_p
tbansal1 2015/11/17 21:12:33 Done.
+ new ExternalDataUseObserver(data_use_aggregator.get(),
+ io_task_runner.get(), ui_task_runner.get()));
+ base::RunLoop().RunUntilIdle();
+ std::vector<std::string> url_regexes;
+ url_regexes.push_back(
+ "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*");
+ external_data_use_observer->RegisterURLRegexes(
+ std::vector<std::string>(url_regexes.size(), std::string()), url_regexes,
+ std::vector<std::string>(url_regexes.size(), foo_label));
+
+ DataUseTabModelTest data_use_tab_model(
+ external_data_use_observer.get(),
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::IO));
+ data_use_ui_tab_model()->SetIODataUseTabModel(
+ data_use_tab_model.GetWeakPtr());
+ data_use_ui_tab_model()->SetUIDataUseTabModel(
+ data_use_tab_model.GetWeakPtr());
+
+ const struct {
+ ui::PageTransition transition_type;
+ std::string expected_label;
+ } tests[] = {
+ {ui::PageTransitionFromInt(ui::PageTransition::PAGE_TRANSITION_LINK |
+ ui::PAGE_TRANSITION_FROM_API),
+ std::string()},
+ {ui::PageTransition::PAGE_TRANSITION_LINK, std::string()},
+ {ui::PageTransition::PAGE_TRANSITION_TYPED, foo_label},
+ {ui::PageTransition::PAGE_TRANSITION_AUTO_BOOKMARK, std::string()},
+ {ui::PageTransition::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()},
+ {ui::PageTransition::PAGE_TRANSITION_GENERATED, foo_label},
+ {ui::PageTransition::PAGE_TRANSITION_RELOAD, std::string()},
+ };
+
+ for (size_t i = 0; i < arraysize(tests); ++i) {
+ // Start a new tab.
+ int32_t foo_tab_id = i + 1;
+ data_use_ui_tab_model()->ReportBrowserNavigation(
+ GURL("https://www.foo.com/#q=abc"), tests[i].transition_type,
+ foo_tab_id);
+ 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))
+ << 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;
+
+ // DataUse object should be labeled correctly.
+ data_usage::DataUse data_use(GURL("http://foo.com/#q=abc"),
sclittle 2015/11/16 23:13:42 Add an include for data_use.h
tbansal1 2015/11/17 21:12:33 Done.
+ base::TimeTicks::Now(),
+ GURL("http://foobar.com"), foo_tab_id,
+ net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
sclittle 2015/11/16 23:13:42 nit: Pull this DataUse creation and the DataUse cr
tbansal1 2015/11/17 21:12:33 Reduced it to one function call.
+ std::string(), 1000, 1000);
+ std::string got_label;
+ data_use_tab_model.GetLabelForDataUse(data_use, &got_label);
+ EXPECT_EQ(tests[i].expected_label, got_label) << i;
+
+ // Report closure of tab.
+ data_use_ui_tab_model()->ReportTabClosure(foo_tab_id);
+ base::RunLoop().RunUntilIdle();
+
+ // DataUse object should not be labeled.
+ data_usage::DataUse data_use_expired(
+ GURL("http://foo.com/#q=abc"), base::TimeTicks::Now(),
sclittle 2015/11/16 23:13:43 base::TimeTicks::Now() could be the same as it was
tbansal1 2015/11/17 21:12:33 Done.
+ GURL("http://foobar.com"), foo_tab_id,
+ net::NetworkChangeNotifier::CONNECTION_UNKNOWN, std::string(), 1000,
+ 1000);
+
+ data_use_tab_model.GetLabelForDataUse(data_use_expired, &got_label);
+ EXPECT_EQ(std::string(), got_label) << i;
+ }
}
// Tests if the Entrance/Exit UI state is tracked correctly.
@@ -48,8 +156,8 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) {
int32_t bar_tab_id = 2;
int32_t baz_tab_id = 3;
- // ShowEntrance should return true only once.
- data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id);
+ // HasDataUseTrackingStarted should return true only once.
+ data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id));
@@ -57,30 +165,30 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) {
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id));
- // ShowExit should return true only once.
- data_use_ui_tab_model()->OnTrackingEnded(foo_tab_id);
+ // HasDataUseTrackingEnded should return true only once.
+ data_use_ui_tab_model()->NotifyTrackingEnding(foo_tab_id);
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
// The tab enters the tracking state again.
- data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id);
+ data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
// The tab exits the tracking state.
- data_use_ui_tab_model()->OnTrackingEnded(foo_tab_id);
+ data_use_ui_tab_model()->NotifyTrackingEnding(foo_tab_id);
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
// The tab enters the tracking state again.
- data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id);
- data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id);
+ data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
+ data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
// ShowExit should return true only once.
- data_use_ui_tab_model()->OnTrackingEnded(bar_tab_id);
+ data_use_ui_tab_model()->NotifyTrackingEnding(bar_tab_id);
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id));
EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id));
@@ -90,12 +198,72 @@ TEST_F(DataUseUITabModelTest, EntranceExitState) {
data_use_ui_tab_model()->ReportTabClosure(bar_tab_id);
// HasDataUseTrackingStarted/Ended should return false for closed tabs.
- data_use_ui_tab_model()->OnTrackingStarted(baz_tab_id);
+ data_use_ui_tab_model()->NotifyTrackingStarting(baz_tab_id);
data_use_ui_tab_model()->ReportTabClosure(baz_tab_id);
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(baz_tab_id));
EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(baz_tab_id));
}
+// Checks if page transition type is converted correctly.
+TEST_F(DataUseUITabModelTest, ConvertTransitionType) {
+ DataUseTabModel::TransitionType transition_type;
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_TYPED), &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_TYPED | 0xFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_TYPED | 0xFFFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_TYPED | 0x12FFFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
+
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK), &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK | 0xFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK | 0xFFFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK | 0x12FFFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
+
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_GENERATED), &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_GENERATED | 0xFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_GENERATED | 0xFFFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
+ EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_GENERATED | 0x12FFFF00),
+ &transition_type));
+ EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
+
+ EXPECT_FALSE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_AUTO_SUBFRAME), &transition_type));
+ EXPECT_FALSE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_MANUAL_SUBFRAME),
+ &transition_type));
+ EXPECT_FALSE(data_use_ui_tab_model()->ConvertTransitionType(
+ ui::PageTransition(ui::PAGE_TRANSITION_FORM_SUBMIT), &transition_type));
+}
+
} // namespace android
} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698