Chromium Code Reviews| 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 |