OLD | NEW |
---|---|
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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
54 | 54 |
55 // Clear out local state. | 55 // Clear out local state. |
56 TabEvents::iterator it = tab_events_.find(tab_id); | 56 TabEvents::iterator it = tab_events_.find(tab_id); |
57 if (it == tab_events_.end()) | 57 if (it == tab_events_.end()) |
58 return; | 58 return; |
59 tab_events_.erase(it); | 59 tab_events_.erase(it); |
60 } | 60 } |
61 | 61 |
62 void DataUseUITabModel::ReportCustomTabInitialNavigation( | 62 void DataUseUITabModel::ReportCustomTabInitialNavigation( |
63 SessionID::id_type tab_id, | 63 SessionID::id_type tab_id, |
64 const std::string& url, | 64 const std::string& package_name, |
65 const std::string& package_name) { | 65 const std::string& url) { |
66 DCHECK(thread_checker_.CalledOnValidThread()); | 66 DCHECK(thread_checker_.CalledOnValidThread()); |
67 | 67 |
68 if (tab_id <= 0) | 68 if (tab_id <= 0) |
69 return; | 69 return; |
70 | 70 |
71 io_task_runner_->PostTask( | 71 io_task_runner_->PostTask( |
72 FROM_HERE, | 72 FROM_HERE, |
73 base::Bind(&DataUseTabModel::OnNavigationEvent, data_use_tab_model_, | 73 base::Bind(&DataUseTabModel::OnNavigationEvent, data_use_tab_model_, |
74 tab_id, DataUseTabModel::TRANSITION_CUSTOM_TAB, GURL(url), | 74 tab_id, DataUseTabModel::TRANSITION_CUSTOM_TAB, GURL(url), |
75 package_name)); | 75 package_name)); |
76 } | 76 } |
77 | 77 |
78 void DataUseUITabModel::SetDataUseTabModel( | 78 void DataUseUITabModel::SetDataUseTabModel( |
79 base::WeakPtr<DataUseTabModel> data_use_tab_model) { | 79 base::WeakPtr<DataUseTabModel> data_use_tab_model) { |
80 DCHECK(thread_checker_.CalledOnValidThread()); | 80 DCHECK(thread_checker_.CalledOnValidThread()); |
81 data_use_tab_model_ = data_use_tab_model; | 81 data_use_tab_model_ = data_use_tab_model; |
82 } | 82 } |
83 | 83 |
84 base::WeakPtr<DataUseUITabModel> DataUseUITabModel::GetWeakPtr() { | 84 base::WeakPtr<DataUseUITabModel> DataUseUITabModel::GetWeakPtr() { |
85 DCHECK(thread_checker_.CalledOnValidThread()); | 85 DCHECK(thread_checker_.CalledOnValidThread()); |
86 return weak_factory_.GetWeakPtr(); | 86 return weak_factory_.GetWeakPtr(); |
87 } | 87 } |
88 | 88 |
89 void DataUseUITabModel::NotifyTrackingStarting(SessionID::id_type tab_id) { | 89 void DataUseUITabModel::NotifyTrackingStarting(SessionID::id_type tab_id) { |
90 DCHECK(thread_checker_.CalledOnValidThread()); | 90 DCHECK(thread_checker_.CalledOnValidThread()); |
91 | 91 |
92 RemoveTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED); | |
megjablon
2015/12/18 20:17:53
Add comment why this is here.
tbansal1
2015/12/18 21:35:37
Done.
| |
93 | |
92 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_STARTED)) | 94 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_STARTED)) |
93 return; | 95 return; |
94 // Since tracking started before the UI could indicate that it ended, it is | 96 // Since tracking started before the UI could indicate that it ended, it is |
95 // not useful for UI to show that it started again. | 97 // not useful for UI to show that it started again. |
96 RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); | 98 RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); |
97 } | 99 } |
98 | 100 |
99 void DataUseUITabModel::NotifyTrackingEnding(SessionID::id_type tab_id) { | 101 void DataUseUITabModel::NotifyTrackingEnding(SessionID::id_type tab_id) { |
100 DCHECK(thread_checker_.CalledOnValidThread()); | 102 DCHECK(thread_checker_.CalledOnValidThread()); |
101 | 103 |
102 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_ENDED)) | 104 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_ENDED)) |
103 return; | 105 return; |
104 // Since tracking ended before the UI could indicate that it stated, it is not | 106 // Since tracking ended before the UI could indicate that it stated, it is not |
105 // useful for UI to show that it ended. | 107 // useful for UI to show that it ended. |
106 RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); | 108 RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); |
109 | |
110 // If the user clicked "Continue" before this navigation, then we do not need | |
111 // to show another UI on this tab. | |
112 RemoveTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED); | |
megjablon
2015/12/18 20:17:53
Won't MaybeCreateTabEvent create the event and ret
tbansal1
2015/12/18 21:35:37
Added comments in the file. Done.
If the state wa
| |
107 } | 113 } |
108 | 114 |
109 bool DataUseUITabModel::HasDataUseTrackingStarted(SessionID::id_type tab_id) { | 115 bool DataUseUITabModel::HasDataUseTrackingStarted(SessionID::id_type tab_id) { |
110 DCHECK(thread_checker_.CalledOnValidThread()); | 116 DCHECK(thread_checker_.CalledOnValidThread()); |
111 | 117 |
112 TabEvents::iterator it = tab_events_.find(tab_id); | 118 TabEvents::iterator it = tab_events_.find(tab_id); |
113 if (it == tab_events_.end()) | 119 if (it == tab_events_.end()) |
114 return false; | 120 return false; |
115 | 121 |
116 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); | 122 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); |
117 } | 123 } |
118 | 124 |
125 bool DataUseUITabModel::WouldDataUseTrackingEnd( | |
126 const std::string& url, | |
127 int page_transition, | |
128 SessionID::id_type tab_id) const { | |
129 DCHECK(thread_checker_.CalledOnValidThread()); | |
130 | |
131 TabEvents::const_iterator it = tab_events_.find(tab_id); | |
132 | |
133 if (it != tab_events_.end() && it->second == DATA_USE_CONTINUE_CLICKED) | |
134 return false; | |
135 | |
136 DataUseTabModel::TransitionType transition_type; | |
137 | |
138 if (!ConvertTransitionType(ui::PageTransitionFromInt(page_transition), | |
139 &transition_type)) { | |
140 return false; | |
141 } | |
142 | |
143 // TODO(tbansal): Hook up to DataUseTabModel, and add tests. | |
144 return false; | |
145 } | |
146 | |
147 void DataUseUITabModel::UserClickedContinueOnDialogBox( | |
148 SessionID::id_type tab_id) { | |
149 DCHECK(thread_checker_.CalledOnValidThread()); | |
150 | |
151 TabEvents::iterator it = tab_events_.find(tab_id); | |
152 if (it != tab_events_.end()) | |
153 tab_events_.erase(it); | |
154 | |
155 MaybeCreateTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED); | |
156 } | |
157 | |
119 bool DataUseUITabModel::HasDataUseTrackingEnded(SessionID::id_type tab_id) { | 158 bool DataUseUITabModel::HasDataUseTrackingEnded(SessionID::id_type tab_id) { |
120 DCHECK(thread_checker_.CalledOnValidThread()); | 159 DCHECK(thread_checker_.CalledOnValidThread()); |
121 | 160 |
122 TabEvents::iterator it = tab_events_.find(tab_id); | 161 TabEvents::iterator it = tab_events_.find(tab_id); |
123 if (it == tab_events_.end()) | 162 if (it == tab_events_.end()) |
124 return false; | 163 return false; |
125 | 164 |
126 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); | 165 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); |
127 } | 166 } |
128 | 167 |
129 bool DataUseUITabModel::MaybeCreateTabEvent(SessionID::id_type tab_id, | 168 bool DataUseUITabModel::MaybeCreateTabEvent(SessionID::id_type tab_id, |
130 DataUseTrackingEvent event) { | 169 DataUseTrackingEvent event) { |
131 DCHECK(thread_checker_.CalledOnValidThread()); | 170 DCHECK(thread_checker_.CalledOnValidThread()); |
132 return tab_events_.insert(std::make_pair(tab_id, event)).second; | 171 return tab_events_.insert(std::make_pair(tab_id, event)).second; |
133 } | 172 } |
134 | 173 |
135 bool DataUseUITabModel::RemoveTabEvent(SessionID::id_type tab_id, | 174 bool DataUseUITabModel::RemoveTabEvent(SessionID::id_type tab_id, |
136 DataUseTrackingEvent event) { | 175 DataUseTrackingEvent event) { |
137 DCHECK(thread_checker_.CalledOnValidThread()); | 176 DCHECK(thread_checker_.CalledOnValidThread()); |
138 TabEvents::iterator it = tab_events_.find(tab_id); | 177 TabEvents::iterator it = tab_events_.find(tab_id); |
139 DCHECK(it != tab_events_.end()); | 178 if (it == tab_events_.end()) |
179 return false; | |
180 | |
140 if (it->second == event) { | 181 if (it->second == event) { |
141 tab_events_.erase(it); | 182 tab_events_.erase(it); |
142 return true; | 183 return true; |
143 } | 184 } |
144 return false; | 185 return false; |
145 } | 186 } |
146 | 187 |
147 bool DataUseUITabModel::ConvertTransitionType( | 188 bool DataUseUITabModel::ConvertTransitionType( |
148 ui::PageTransition page_transition, | 189 ui::PageTransition page_transition, |
149 DataUseTabModel::TransitionType* transition_type) const { | 190 DataUseTabModel::TransitionType* transition_type) const { |
191 DCHECK(thread_checker_.CalledOnValidThread()); | |
192 | |
150 if (!ui::PageTransitionIsMainFrame(page_transition) || | 193 if (!ui::PageTransitionIsMainFrame(page_transition) || |
151 (((page_transition & ui::PAGE_TRANSITION_CORE_MASK) != | 194 (((page_transition & ui::PAGE_TRANSITION_CORE_MASK) != |
152 ui::PAGE_TRANSITION_RELOAD) && | 195 ui::PAGE_TRANSITION_RELOAD) && |
153 !ui::PageTransitionIsNewNavigation(page_transition))) { | 196 !ui::PageTransitionIsNewNavigation(page_transition))) { |
154 return false; | 197 return false; |
155 } | 198 } |
156 | 199 |
157 switch (page_transition & ui::PAGE_TRANSITION_CORE_MASK) { | 200 switch (page_transition & ui::PAGE_TRANSITION_CORE_MASK) { |
158 case ui::PAGE_TRANSITION_LINK: | 201 case ui::PAGE_TRANSITION_LINK: |
159 if ((page_transition & ui::PAGE_TRANSITION_FROM_API) != 0) { | 202 if ((page_transition & ui::PAGE_TRANSITION_FROM_API) != 0) { |
(...skipping 29 matching lines...) Expand all Loading... | |
189 } | 232 } |
190 return false; | 233 return false; |
191 default: | 234 default: |
192 return false; | 235 return false; |
193 } | 236 } |
194 } | 237 } |
195 | 238 |
196 } // namespace android | 239 } // namespace android |
197 | 240 |
198 } // namespace chrome | 241 } // namespace chrome |
OLD | NEW |