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

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

Issue 1443683002: Notify DataUseTabModel of navigations and tab closures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments, Using two weak ptrs now. Created 5 years, 1 month 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_tab_model.h" 5 #include "chrome/browser/android/data_usage/data_use_tab_model.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "chrome/browser/android/data_usage/external_data_use_observer.h" 8 #include "chrome/browser/android/data_usage/external_data_use_observer.h"
9 #include "chrome/browser/android/data_usage/tab_data_use_entry.h" 9 #include "chrome/browser/android/data_usage/tab_data_use_entry.h"
10 #include "content/public/browser/browser_thread.h"
10 11
11 namespace { 12 namespace {
12 13
13 // TODO(rajendrant): To be changeable via field trial. 14 // TODO(rajendrant): To be changeable via field trial.
14 // Indicates the maximum number of tabs to maintain session information about. 15 // Indicates the maximum number of tabs to maintain session information about.
15 const size_t kMaxTabEntries = 200; 16 const size_t kMaxTabEntries = 200;
16 17
17 // Returns true if |tab_id| is a valid tab ID. 18 // Returns true if |tab_id| is a valid tab ID.
18 bool IsValidTabID(int32_t tab_id) { 19 bool IsValidTabID(int32_t tab_id) {
19 return tab_id >= 0; 20 return tab_id >= 0;
20 } 21 }
21 22
22 } // namespace 23 } // namespace
23 24
24 namespace chrome { 25 namespace chrome {
25 26
26 namespace android { 27 namespace android {
27 28
28 size_t DataUseTabModel::GetMaxTabEntriesForTests() { 29 size_t DataUseTabModel::GetMaxTabEntriesForTests() {
29 return kMaxTabEntries; 30 return kMaxTabEntries;
30 } 31 }
31 32
32 DataUseTabModel::DataUseTabModel( 33 DataUseTabModel::DataUseTabModel(
33 const ExternalDataUseObserver* data_use_observer, 34 const ExternalDataUseObserver* data_use_observer,
34 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) 35 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
35 : data_use_observer_(data_use_observer), 36 : data_use_observer_(data_use_observer),
36 observer_list_(new base::ObserverListThreadSafe<TabDataUseObserver>), 37 observer_list_(new base::ObserverListThreadSafe<TabDataUseObserver>),
37 weak_factory_(this) {} 38 io_weak_factory_(this),
39 ui_weak_factory_(this) {}
38 40
39 DataUseTabModel::~DataUseTabModel() { 41 DataUseTabModel::~DataUseTabModel() {
40 DCHECK(thread_checker_.CalledOnValidThread()); 42 DCHECK(thread_checker_.CalledOnValidThread());
41 } 43 }
42 44
43 base::WeakPtr<DataUseTabModel> DataUseTabModel::GetWeakPtr() { 45 base::WeakPtr<DataUseTabModel> DataUseTabModel::GetIOWeakPtr() {
46 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
44 DCHECK(thread_checker_.CalledOnValidThread()); 47 DCHECK(thread_checker_.CalledOnValidThread());
45 return weak_factory_.GetWeakPtr(); 48 return io_weak_factory_.GetWeakPtr();
49 }
50
51 base::WeakPtr<DataUseTabModel> DataUseTabModel::GetUIWeakPtr() {
52 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
53 return ui_weak_factory_.GetWeakPtr();
46 } 54 }
47 55
48 void DataUseTabModel::OnNavigationEvent(int32_t tab_id, 56 void DataUseTabModel::OnNavigationEvent(int32_t tab_id,
49 TransitionType transition, 57 TransitionType transition,
50 const GURL& url, 58 const GURL& url) {
51 const std::string& package) {
52 DCHECK(thread_checker_.CalledOnValidThread()); 59 DCHECK(thread_checker_.CalledOnValidThread());
53 DCHECK(IsValidTabID(tab_id)); 60 DCHECK(IsValidTabID(tab_id));
54 61
55 // TODO(rajendrant): implementation to use package.
56 switch (transition) { 62 switch (transition) {
57 case TRANSITION_OMNIBOX_SEARCH: 63 case TRANSITION_OMNIBOX_SEARCH:
64 case TRANSITION_OMNIBOX_NAVIGATION:
58 case TRANSITION_FROM_EXTERNAL_APP: { 65 case TRANSITION_FROM_EXTERNAL_APP: {
59 // Enter events. 66 // Enter events.
60 std::string label; 67 std::string label;
61 if (data_use_observer_->Matches(url, &label)) { 68 if (data_use_observer_->Matches(url, &label)) {
62 // TODO(rajendrant): Need to handle scenarios where these labels change 69 // TODO(rajendrant): Need to handle scenarios where these labels change
63 // in the middle of a tab session. Should |data_use_observer_| notify us 70 // in the middle of a tab session. Should |data_use_observer_| notify us
64 // about a cleanup. What happens to currently active tab sessions. 71 // about a cleanup. What happens to currently active tab sessions.
65 DCHECK(!label.empty()); 72 DCHECK(!label.empty());
66 StartTrackingDataUse(tab_id, label); 73 StartTrackingDataUse(tab_id, label);
67 } 74 }
68 break; 75 break;
69 } 76 }
70 77
71 case TRANSITION_FROM_NAVSUGGEST: 78 case TRANSITION_FROM_NAVSUGGEST:
72 case TRANSITION_OMNIBOX_NAVIGATION:
73 case TRANSITION_BOOKMARK: 79 case TRANSITION_BOOKMARK:
74 case TRANSITION_HISTORY_ITEM: 80 case TRANSITION_HISTORY_ITEM:
75 case TRANSITION_TO_EXTERNAL_APP: 81 case TRANSITION_TO_EXTERNAL_APP:
76 // Exit events. 82 // Exit events.
77 EndTrackingDataUse(tab_id); 83 EndTrackingDataUse(tab_id);
78 break; 84 break;
79 85
80 default: 86 default:
81 NOTREACHED(); 87 NOTREACHED();
82 break; 88 break;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 } 195 }
190 } 196 }
191 DCHECK(oldest_tab_entry_iterator != active_tabs_.end()); 197 DCHECK(oldest_tab_entry_iterator != active_tabs_.end());
192 active_tabs_.erase(oldest_tab_entry_iterator); 198 active_tabs_.erase(oldest_tab_entry_iterator);
193 } 199 }
194 } 200 }
195 201
196 } // namespace android 202 } // namespace android
197 203
198 } // namespace chrome 204 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698