| 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 "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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |