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

Side by Side Diff: chrome/browser/android/data_usage/data_use_ui_tab_model.cc

Issue 1539763004: Miscellaneous fixes to DataUse UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 11 months 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 <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 // Clear out local state. 50 // Clear out local state.
51 TabEvents::iterator it = tab_events_.find(tab_id); 51 TabEvents::iterator it = tab_events_.find(tab_id);
52 if (it == tab_events_.end()) 52 if (it == tab_events_.end())
53 return; 53 return;
54 tab_events_.erase(it); 54 tab_events_.erase(it);
55 } 55 }
56 56
57 void DataUseUITabModel::ReportCustomTabInitialNavigation( 57 void DataUseUITabModel::ReportCustomTabInitialNavigation(
58 SessionID::id_type tab_id, 58 SessionID::id_type tab_id,
59 const std::string& url, 59 const std::string& package_name,
60 const std::string& package_name) { 60 const std::string& url) {
61 DCHECK(thread_checker_.CalledOnValidThread()); 61 DCHECK(thread_checker_.CalledOnValidThread());
62 62
63 if (tab_id <= 0) 63 if (tab_id <= 0)
64 return; 64 return;
65 65
66 if (data_use_tab_model_) { 66 if (data_use_tab_model_) {
67 data_use_tab_model_->OnNavigationEvent( 67 data_use_tab_model_->OnNavigationEvent(
68 tab_id, DataUseTabModel::TRANSITION_CUSTOM_TAB, GURL(url), 68 tab_id, DataUseTabModel::TRANSITION_CUSTOM_TAB, GURL(url),
69 package_name); 69 package_name);
70 } 70 }
(...skipping 11 matching lines...) Expand all
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 // Clear out the previous state if is equal to DATA_USE_CONTINUE_CLICKED. This
93 // ensures that MaybeCreateTabEvent can successfully insert |tab_id| into the
94 // map, and update its value to DATA_USE_TRACKING_STARTED.
95 RemoveTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED);
96
92 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_STARTED)) 97 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_STARTED))
93 return; 98 return;
94 // Since tracking started before the UI could indicate that it ended, it is 99 // Since tracking started before the UI could indicate that it ended, it is
95 // not useful for UI to show that it started again. 100 // not useful for UI to show that it started again.
96 RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); 101 RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED);
97 } 102 }
98 103
99 void DataUseUITabModel::NotifyTrackingEnding(SessionID::id_type tab_id) { 104 void DataUseUITabModel::NotifyTrackingEnding(SessionID::id_type tab_id) {
100 DCHECK(thread_checker_.CalledOnValidThread()); 105 DCHECK(thread_checker_.CalledOnValidThread());
101 106
102 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_ENDED)) 107 if (MaybeCreateTabEvent(tab_id, DATA_USE_TRACKING_ENDED))
103 return; 108 return;
104 // Since tracking ended before the UI could indicate that it stated, it is not 109 // Since tracking ended before the UI could indicate that it stated, it is not
105 // useful for UI to show that it ended. 110 // useful for UI to show that it ended.
106 RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); 111 RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED);
112
113 // If the user clicked "Continue" before this navigation, then |tab_id| value
114 // would be set to DATA_USE_CONTINUE_CLICKED. In that case,
115 // MaybeCreateTabEvent above would have returned false. So, removing tab_id
116 // from the map below ensures that no UI is shown on the tab. This also
117 // resets the state of |tab_id|, so that dialog box or snackbar may be shown
118 // for future navigations.
119 RemoveTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED);
107 } 120 }
108 121
109 bool DataUseUITabModel::HasDataUseTrackingStarted(SessionID::id_type tab_id) { 122 bool DataUseUITabModel::HasDataUseTrackingStarted(SessionID::id_type tab_id) {
110 DCHECK(thread_checker_.CalledOnValidThread()); 123 DCHECK(thread_checker_.CalledOnValidThread());
111 124
112 TabEvents::iterator it = tab_events_.find(tab_id); 125 TabEvents::iterator it = tab_events_.find(tab_id);
113 if (it == tab_events_.end()) 126 if (it == tab_events_.end())
114 return false; 127 return false;
115 128
116 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); 129 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED);
117 } 130 }
118 131
132 bool DataUseUITabModel::WouldDataUseTrackingEnd(
133 const std::string& url,
134 int page_transition,
135 SessionID::id_type tab_id) const {
136 DCHECK(thread_checker_.CalledOnValidThread());
137
138 TabEvents::const_iterator it = tab_events_.find(tab_id);
139
140 if (it != tab_events_.end() && it->second == DATA_USE_CONTINUE_CLICKED)
141 return false;
142
143 DataUseTabModel::TransitionType transition_type;
144
145 if (!ConvertTransitionType(ui::PageTransitionFromInt(page_transition),
146 &transition_type)) {
147 return false;
148 }
149
150 if (!data_use_tab_model_)
151 return false;
152
153 return data_use_tab_model_->WouldNavigationEventEndTracking(
154 tab_id, transition_type, GURL(url));
155 }
156
157 void DataUseUITabModel::UserClickedContinueOnDialogBox(
158 SessionID::id_type tab_id) {
159 DCHECK(thread_checker_.CalledOnValidThread());
160
161 TabEvents::iterator it = tab_events_.find(tab_id);
162 if (it != tab_events_.end())
163 tab_events_.erase(it);
164
165 MaybeCreateTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED);
166 }
167
119 bool DataUseUITabModel::HasDataUseTrackingEnded(SessionID::id_type tab_id) { 168 bool DataUseUITabModel::HasDataUseTrackingEnded(SessionID::id_type tab_id) {
120 DCHECK(thread_checker_.CalledOnValidThread()); 169 DCHECK(thread_checker_.CalledOnValidThread());
121 170
122 TabEvents::iterator it = tab_events_.find(tab_id); 171 TabEvents::iterator it = tab_events_.find(tab_id);
123 if (it == tab_events_.end()) 172 if (it == tab_events_.end())
124 return false; 173 return false;
125 174
126 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); 175 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED);
127 } 176 }
128 177
129 bool DataUseUITabModel::MaybeCreateTabEvent(SessionID::id_type tab_id, 178 bool DataUseUITabModel::MaybeCreateTabEvent(SessionID::id_type tab_id,
130 DataUseTrackingEvent event) { 179 DataUseTrackingEvent event) {
131 DCHECK(thread_checker_.CalledOnValidThread()); 180 DCHECK(thread_checker_.CalledOnValidThread());
132 return tab_events_.insert(std::make_pair(tab_id, event)).second; 181 return tab_events_.insert(std::make_pair(tab_id, event)).second;
133 } 182 }
134 183
135 bool DataUseUITabModel::RemoveTabEvent(SessionID::id_type tab_id, 184 bool DataUseUITabModel::RemoveTabEvent(SessionID::id_type tab_id,
136 DataUseTrackingEvent event) { 185 DataUseTrackingEvent event) {
137 DCHECK(thread_checker_.CalledOnValidThread()); 186 DCHECK(thread_checker_.CalledOnValidThread());
138 TabEvents::iterator it = tab_events_.find(tab_id); 187 TabEvents::iterator it = tab_events_.find(tab_id);
139 DCHECK(it != tab_events_.end()); 188 if (it == tab_events_.end())
189 return false;
190
140 if (it->second == event) { 191 if (it->second == event) {
141 tab_events_.erase(it); 192 tab_events_.erase(it);
142 return true; 193 return true;
143 } 194 }
144 return false; 195 return false;
145 } 196 }
146 197
147 bool DataUseUITabModel::ConvertTransitionType( 198 bool DataUseUITabModel::ConvertTransitionType(
148 ui::PageTransition page_transition, 199 ui::PageTransition page_transition,
149 DataUseTabModel::TransitionType* transition_type) const { 200 DataUseTabModel::TransitionType* transition_type) const {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 } 242 }
192 return false; 243 return false;
193 default: 244 default:
194 return false; 245 return false;
195 } 246 }
196 } 247 }
197 248
198 } // namespace android 249 } // namespace android
199 250
200 } // namespace chrome 251 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698