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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/data_usage/data_use_ui_tab_model.h" 5 #include "chrome/browser/android/data_usage/data_use_ui_tab_model.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h"
11 #include "chrome/browser/android/data_usage/data_use_tab_model.h"
9 #include "chrome/browser/android/data_usage/data_use_ui_tab_model_factory.h" 12 #include "chrome/browser/android/data_usage/data_use_ui_tab_model_factory.h"
13 #include "chrome/browser/android/data_usage/external_data_use_observer.h"
10 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/sessions/session_tab_helper.h" 15 #include "chrome/browser/sessions/session_tab_helper.h"
12 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 16 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
17 #include "components/data_usage/core/data_use_aggregator.h"
18 #include "components/data_usage/core/data_use_amortizer.h"
19 #include "components/data_usage/core/data_use_annotator.h"
20 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
14 #include "content/public/test/test_renderer_host.h" 22 #include "content/public/test/test_renderer_host.h"
15 #include "content/public/test/web_contents_tester.h" 23 #include "content/public/test/web_contents_tester.h"
16 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/base/page_transition_types.h" 25 #include "ui/base/page_transition_types.h"
18 #include "url/gurl.h" 26 #include "url/gurl.h"
19 27
20 namespace chrome { 28 namespace chrome {
21 29
22 namespace android { 30 namespace android {
23 31
32 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.
33 public:
34 DataUseTabModelTest(ExternalDataUseObserver* external_data_use_observer,
35 scoped_refptr<base::SingleThreadTaskRunner> task_runner_)
36 : DataUseTabModel(external_data_use_observer, task_runner_.get()),
37 weak_factory_(this) {}
38
39 base::WeakPtr<DataUseTabModelTest> GetWeakPtr() {
40 return weak_factory_.GetWeakPtr();
41 }
42
43 private:
44 base::WeakPtrFactory<DataUseTabModelTest> weak_factory_;
45 };
46
24 class DataUseUITabModelTest : public ChromeRenderViewHostTestHarness { 47 class DataUseUITabModelTest : public ChromeRenderViewHostTestHarness {
25 public: 48 public:
26 using ChromeRenderViewHostTestHarness::web_contents; 49 using ChromeRenderViewHostTestHarness::web_contents;
27 50
28 DataUseUITabModel* data_use_ui_tab_model() { 51 DataUseUITabModel* data_use_ui_tab_model() {
29 return chrome::android::DataUseUITabModelFactory::GetForBrowserContext( 52 return chrome::android::DataUseUITabModelFactory::GetForBrowserContext(
30 Profile::FromBrowserContext(web_contents()->GetBrowserContext())); 53 Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
31 } 54 }
32 }; 55 };
33 56
34 // Tests that DataUseTabModel is notified of tab closure and navigation events. 57 // Tests that DataUseTabModel is notified of tab closure and navigation events,
58 // and DataUseTabModel notifies DataUseUITabModel.
35 TEST_F(DataUseUITabModelTest, ReportTabEventsTest) { 59 TEST_F(DataUseUITabModelTest, ReportTabEventsTest) {
36 data_use_ui_tab_model()->ReportBrowserNavigation( 60 std::string foo_label("foo_label");
37 GURL("https://www.example.com"), 61
38 ui::PageTransition::PAGE_TRANSITION_TYPED, 62 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner =
39 SessionTabHelper::IdForTab(web_contents())); 63 content::BrowserThread::GetMessageLoopProxyForThread(
40 data_use_ui_tab_model()->ReportTabClosure( 64 content::BrowserThread::IO);
41 SessionTabHelper::IdForTab(web_contents())); 65 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner =
42 // TODO(tbansal): Test that DataUseTabModel is notified. 66 content::BrowserThread::GetMessageLoopProxyForThread(
67 content::BrowserThread::UI);
68
69 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.
70 new data_usage::DataUseAggregator(
71 scoped_ptr<data_usage::DataUseAnnotator>(),
72 scoped_ptr<data_usage::DataUseAmortizer>()));
73
74 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.
75 new ExternalDataUseObserver(data_use_aggregator.get(),
76 io_task_runner.get(), ui_task_runner.get()));
77 base::RunLoop().RunUntilIdle();
78 std::vector<std::string> url_regexes;
79 url_regexes.push_back(
80 "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*");
81 external_data_use_observer->RegisterURLRegexes(
82 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes,
83 std::vector<std::string>(url_regexes.size(), foo_label));
84
85 DataUseTabModelTest data_use_tab_model(
86 external_data_use_observer.get(),
87 content::BrowserThread::GetMessageLoopProxyForThread(
88 content::BrowserThread::IO));
89 data_use_ui_tab_model()->SetIODataUseTabModel(
90 data_use_tab_model.GetWeakPtr());
91 data_use_ui_tab_model()->SetUIDataUseTabModel(
92 data_use_tab_model.GetWeakPtr());
93
94 const struct {
95 ui::PageTransition transition_type;
96 std::string expected_label;
97 } tests[] = {
98 {ui::PageTransitionFromInt(ui::PageTransition::PAGE_TRANSITION_LINK |
99 ui::PAGE_TRANSITION_FROM_API),
100 std::string()},
101 {ui::PageTransition::PAGE_TRANSITION_LINK, std::string()},
102 {ui::PageTransition::PAGE_TRANSITION_TYPED, foo_label},
103 {ui::PageTransition::PAGE_TRANSITION_AUTO_BOOKMARK, std::string()},
104 {ui::PageTransition::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()},
105 {ui::PageTransition::PAGE_TRANSITION_GENERATED, foo_label},
106 {ui::PageTransition::PAGE_TRANSITION_RELOAD, std::string()},
107 };
108
109 for (size_t i = 0; i < arraysize(tests); ++i) {
110 // Start a new tab.
111 int32_t foo_tab_id = i + 1;
112 data_use_ui_tab_model()->ReportBrowserNavigation(
113 GURL("https://www.foo.com/#q=abc"), tests[i].transition_type,
114 foo_tab_id);
115 base::RunLoop().RunUntilIdle();
116
117 // |data_use_ui_tab_model| should receive callback about starting of
118 // tracking of data usage for |foo_tab_id|.
119 EXPECT_EQ(!tests[i].expected_label.empty(),
120 data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id))
121 << i;
122 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id))
123 << i;
124 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id))
125 << i;
126
127 // DataUse object should be labeled correctly.
128 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.
129 base::TimeTicks::Now(),
130 GURL("http://foobar.com"), foo_tab_id,
131 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.
132 std::string(), 1000, 1000);
133 std::string got_label;
134 data_use_tab_model.GetLabelForDataUse(data_use, &got_label);
135 EXPECT_EQ(tests[i].expected_label, got_label) << i;
136
137 // Report closure of tab.
138 data_use_ui_tab_model()->ReportTabClosure(foo_tab_id);
139 base::RunLoop().RunUntilIdle();
140
141 // DataUse object should not be labeled.
142 data_usage::DataUse data_use_expired(
143 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.
144 GURL("http://foobar.com"), foo_tab_id,
145 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, std::string(), 1000,
146 1000);
147
148 data_use_tab_model.GetLabelForDataUse(data_use_expired, &got_label);
149 EXPECT_EQ(std::string(), got_label) << i;
150 }
43 } 151 }
44 152
45 // Tests if the Entrance/Exit UI state is tracked correctly. 153 // Tests if the Entrance/Exit UI state is tracked correctly.
46 TEST_F(DataUseUITabModelTest, EntranceExitState) { 154 TEST_F(DataUseUITabModelTest, EntranceExitState) {
47 int32_t foo_tab_id = 1; 155 int32_t foo_tab_id = 1;
48 int32_t bar_tab_id = 2; 156 int32_t bar_tab_id = 2;
49 int32_t baz_tab_id = 3; 157 int32_t baz_tab_id = 3;
50 158
51 // ShowEntrance should return true only once. 159 // HasDataUseTrackingStarted should return true only once.
52 data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id); 160 data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
53 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 161 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
54 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 162 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
55 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id)); 163 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id));
56 164
57 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id)); 165 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id));
58 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id)); 166 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id));
59 167
60 // ShowExit should return true only once. 168 // HasDataUseTrackingEnded should return true only once.
61 data_use_ui_tab_model()->OnTrackingEnded(foo_tab_id); 169 data_use_ui_tab_model()->NotifyTrackingEnding(foo_tab_id);
62 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 170 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
63 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id)); 171 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id));
64 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id)); 172 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(foo_tab_id));
65 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 173 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
66 174
67 // The tab enters the tracking state again. 175 // The tab enters the tracking state again.
68 data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id); 176 data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
69 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 177 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
70 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 178 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
71 179
72 // The tab exits the tracking state. 180 // The tab exits the tracking state.
73 data_use_ui_tab_model()->OnTrackingEnded(foo_tab_id); 181 data_use_ui_tab_model()->NotifyTrackingEnding(foo_tab_id);
74 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 182 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
75 183
76 // The tab enters the tracking state again. 184 // The tab enters the tracking state again.
77 data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id); 185 data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
78 data_use_ui_tab_model()->OnTrackingStarted(foo_tab_id); 186 data_use_ui_tab_model()->NotifyTrackingStarting(foo_tab_id);
79 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 187 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
80 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id)); 188 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(foo_tab_id));
81 189
82 // ShowExit should return true only once. 190 // ShowExit should return true only once.
83 data_use_ui_tab_model()->OnTrackingEnded(bar_tab_id); 191 data_use_ui_tab_model()->NotifyTrackingEnding(bar_tab_id);
84 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id)); 192 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id));
85 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id)); 193 EXPECT_TRUE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id));
86 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id)); 194 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(bar_tab_id));
87 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id)); 195 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(bar_tab_id));
88 196
89 data_use_ui_tab_model()->ReportTabClosure(foo_tab_id); 197 data_use_ui_tab_model()->ReportTabClosure(foo_tab_id);
90 data_use_ui_tab_model()->ReportTabClosure(bar_tab_id); 198 data_use_ui_tab_model()->ReportTabClosure(bar_tab_id);
91 199
92 // HasDataUseTrackingStarted/Ended should return false for closed tabs. 200 // HasDataUseTrackingStarted/Ended should return false for closed tabs.
93 data_use_ui_tab_model()->OnTrackingStarted(baz_tab_id); 201 data_use_ui_tab_model()->NotifyTrackingStarting(baz_tab_id);
94 data_use_ui_tab_model()->ReportTabClosure(baz_tab_id); 202 data_use_ui_tab_model()->ReportTabClosure(baz_tab_id);
95 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(baz_tab_id)); 203 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingStarted(baz_tab_id));
96 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(baz_tab_id)); 204 EXPECT_FALSE(data_use_ui_tab_model()->HasDataUseTrackingEnded(baz_tab_id));
97 } 205 }
98 206
207 // Checks if page transition type is converted correctly.
208 TEST_F(DataUseUITabModelTest, ConvertTransitionType) {
209 DataUseTabModel::TransitionType transition_type;
210 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
211 ui::PageTransition(ui::PAGE_TRANSITION_TYPED), &transition_type));
212 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
213 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
214 ui::PageTransition(ui::PAGE_TRANSITION_TYPED | 0xFF00),
215 &transition_type));
216 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
217 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
218 ui::PageTransition(ui::PAGE_TRANSITION_TYPED | 0xFFFF00),
219 &transition_type));
220 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
221 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
222 ui::PageTransition(ui::PAGE_TRANSITION_TYPED | 0x12FFFF00),
223 &transition_type));
224 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_NAVIGATION, transition_type);
225
226 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
227 ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK), &transition_type));
228 EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
229 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
230 ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK | 0xFF00),
231 &transition_type));
232 EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
233 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
234 ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK | 0xFFFF00),
235 &transition_type));
236 EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
237 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
238 ui::PageTransition(ui::PAGE_TRANSITION_AUTO_BOOKMARK | 0x12FFFF00),
239 &transition_type));
240 EXPECT_EQ(DataUseTabModel::TRANSITION_BOOKMARK, transition_type);
241
242 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
243 ui::PageTransition(ui::PAGE_TRANSITION_GENERATED), &transition_type));
244 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
245 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
246 ui::PageTransition(ui::PAGE_TRANSITION_GENERATED | 0xFF00),
247 &transition_type));
248 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
249 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
250 ui::PageTransition(ui::PAGE_TRANSITION_GENERATED | 0xFFFF00),
251 &transition_type));
252 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
253 EXPECT_TRUE(data_use_ui_tab_model()->ConvertTransitionType(
254 ui::PageTransition(ui::PAGE_TRANSITION_GENERATED | 0x12FFFF00),
255 &transition_type));
256 EXPECT_EQ(DataUseTabModel::TRANSITION_OMNIBOX_SEARCH, transition_type);
257
258 EXPECT_FALSE(data_use_ui_tab_model()->ConvertTransitionType(
259 ui::PageTransition(ui::PAGE_TRANSITION_AUTO_SUBFRAME), &transition_type));
260 EXPECT_FALSE(data_use_ui_tab_model()->ConvertTransitionType(
261 ui::PageTransition(ui::PAGE_TRANSITION_MANUAL_SUBFRAME),
262 &transition_type));
263 EXPECT_FALSE(data_use_ui_tab_model()->ConvertTransitionType(
264 ui::PageTransition(ui::PAGE_TRANSITION_FORM_SUBMIT), &transition_type));
265 }
266
99 } // namespace android 267 } // namespace android
100 268
101 } // namespace chrome 269 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698