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

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: Rebased 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::CheckAndResetDataUseTrackingStarted(
123 SessionID::id_type tab_id) {
110 DCHECK(thread_checker_.CalledOnValidThread()); 124 DCHECK(thread_checker_.CalledOnValidThread());
111 125
112 TabEvents::iterator it = tab_events_.find(tab_id); 126 TabEvents::iterator it = tab_events_.find(tab_id);
113 if (it == tab_events_.end()) 127 if (it == tab_events_.end())
114 return false; 128 return false;
115 129
116 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED); 130 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_STARTED);
117 } 131 }
118 132
119 bool DataUseUITabModel::HasDataUseTrackingEnded(SessionID::id_type tab_id) { 133 bool DataUseUITabModel::WouldDataUseTrackingEnd(
134 const std::string& url,
135 int page_transition,
136 SessionID::id_type tab_id) const {
137 DCHECK(thread_checker_.CalledOnValidThread());
138
139 TabEvents::const_iterator it = tab_events_.find(tab_id);
140
141 if (it != tab_events_.end() && it->second == DATA_USE_CONTINUE_CLICKED)
142 return false;
143
144 DataUseTabModel::TransitionType transition_type;
145
146 if (!ConvertTransitionType(ui::PageTransitionFromInt(page_transition),
147 &transition_type)) {
148 return false;
149 }
150
151 if (!data_use_tab_model_)
152 return false;
153
154 return data_use_tab_model_->WouldNavigationEventEndTracking(
155 tab_id, transition_type, GURL(url));
156 }
157
158 void DataUseUITabModel::UserClickedContinueOnDialogBox(
159 SessionID::id_type tab_id) {
120 DCHECK(thread_checker_.CalledOnValidThread()); 160 DCHECK(thread_checker_.CalledOnValidThread());
121 161
122 TabEvents::iterator it = tab_events_.find(tab_id); 162 TabEvents::iterator it = tab_events_.find(tab_id);
163 if (it != tab_events_.end())
164 tab_events_.erase(it);
165
166 MaybeCreateTabEvent(tab_id, DATA_USE_CONTINUE_CLICKED);
167 }
168
169 bool DataUseUITabModel::CheckAndResetDataUseTrackingEnded(
170 SessionID::id_type tab_id) {
171 DCHECK(thread_checker_.CalledOnValidThread());
172
173 TabEvents::iterator it = tab_events_.find(tab_id);
123 if (it == tab_events_.end()) 174 if (it == tab_events_.end())
124 return false; 175 return false;
125 176
126 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED); 177 return RemoveTabEvent(tab_id, DATA_USE_TRACKING_ENDED);
127 } 178 }
128 179
129 bool DataUseUITabModel::MaybeCreateTabEvent(SessionID::id_type tab_id, 180 bool DataUseUITabModel::MaybeCreateTabEvent(SessionID::id_type tab_id,
130 DataUseTrackingEvent event) { 181 DataUseTrackingEvent event) {
131 DCHECK(thread_checker_.CalledOnValidThread()); 182 DCHECK(thread_checker_.CalledOnValidThread());
132 return tab_events_.insert(std::make_pair(tab_id, event)).second; 183 return tab_events_.insert(std::make_pair(tab_id, event)).second;
133 } 184 }
134 185
135 bool DataUseUITabModel::RemoveTabEvent(SessionID::id_type tab_id, 186 bool DataUseUITabModel::RemoveTabEvent(SessionID::id_type tab_id,
136 DataUseTrackingEvent event) { 187 DataUseTrackingEvent event) {
137 DCHECK(thread_checker_.CalledOnValidThread()); 188 DCHECK(thread_checker_.CalledOnValidThread());
138 TabEvents::iterator it = tab_events_.find(tab_id); 189 TabEvents::iterator it = tab_events_.find(tab_id);
139 DCHECK(it != tab_events_.end()); 190 if (it == tab_events_.end())
191 return false;
192
140 if (it->second == event) { 193 if (it->second == event) {
141 tab_events_.erase(it); 194 tab_events_.erase(it);
142 return true; 195 return true;
143 } 196 }
144 return false; 197 return false;
145 } 198 }
146 199
147 bool DataUseUITabModel::ConvertTransitionType( 200 bool DataUseUITabModel::ConvertTransitionType(
148 ui::PageTransition page_transition, 201 ui::PageTransition page_transition,
149 DataUseTabModel::TransitionType* transition_type) const { 202 DataUseTabModel::TransitionType* transition_type) const {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 } 244 }
192 return false; 245 return false;
193 default: 246 default:
194 return false; 247 return false;
195 } 248 }
196 } 249 }
197 250
198 } // namespace android 251 } // namespace android
199 252
200 } // namespace chrome 253 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698