Index: chrome/browser/profiles/profile_impl_io_data.cc |
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc |
index 6a68c08b8c0851fffb3f17d96fceb2aa496c40ff..1cac446d7fcd6ddada5a6b1d1997d28632b4711b 100644 |
--- a/chrome/browser/profiles/profile_impl_io_data.cc |
+++ b/chrome/browser/profiles/profile_impl_io_data.cc |
@@ -65,6 +65,13 @@ |
#include "net/url_request/url_request_job_factory_impl.h" |
#include "storage/browser/quota/special_storage_policy.h" |
+#if defined(OS_ANDROID) |
+#include "chrome/browser/android/data_usage/data_use_tab_model.h" |
+#include "chrome/browser/android/data_usage/data_use_ui_tab_model.h" |
+#include "chrome/browser/android/data_usage/data_use_ui_tab_model_factory.h" |
+#include "chrome/browser/android/data_usage/external_data_use_observer.h" |
+#endif // defined(OS_ANDROID) |
+ |
namespace { |
net::BackendType ChooseCacheBackendType() { |
@@ -91,6 +98,28 @@ net::BackendType ChooseCacheBackendType() { |
#endif |
} |
+#if defined(OS_ANDROID) |
+// Returns the weak pointer to DataUseTabModel, and adds |data_use_ui_tab_model| |
+// as an observer to DataUseTabModel. Must be called only on IO thread. |
+base::WeakPtr<chrome::android::DataUseTabModel> SetDataUseTabModelOnIOThread( |
+ IOThread* io_thread, |
+ base::WeakPtr<chrome::android::DataUseUITabModel> data_use_ui_tab_model) { |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
+ |
+ if (!io_thread || !io_thread->globals()) |
sclittle
2015/11/30 22:33:38
nit: It looks like |io_thread| and |io_thread->glo
tbansal1
2015/11/30 22:59:09
Done.
|
+ return base::WeakPtr<chrome::android::DataUseTabModel>(); |
+ |
+ base::WeakPtr<chrome::android::DataUseTabModel> data_use_tab_model = |
+ io_thread->globals() |
+ ->external_data_use_observer->GetDataUseTabModel() |
+ ->GetWeakPtr(); |
+ if (data_use_tab_model) |
+ data_use_tab_model->AddObserver(data_use_ui_tab_model); |
+ return data_use_tab_model; |
+} |
+ |
+#endif // defined(OS_ANDROID) |
+ |
} // namespace |
using content::BrowserThread; |
@@ -199,6 +228,23 @@ void ProfileImplIOData::Handle::Init( |
profile_->GetRequestContext(), store.Pass(), |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
db_task_runner); |
+ |
+#if defined(OS_ANDROID) |
+ // Pass the DataUseTabModel weak pointer to DataUseUITabModel, and register |
+ // DataUseUITabModel as a DataUseTabModel::TabDataUseObserver. |
+ chrome::android::DataUseUITabModel* data_use_ui_tab_model = |
+ chrome::android::DataUseUITabModelFactory::GetForBrowserContext(profile_); |
+ |
+ if (data_use_ui_tab_model && !io_data_->IsOffTheRecord()) { |
+ BrowserThread::PostTaskAndReplyWithResult( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&SetDataUseTabModelOnIOThread, |
+ g_browser_process->io_thread(), |
+ data_use_ui_tab_model->GetWeakPtr()), |
+ base::Bind(&chrome::android::DataUseUITabModel::SetDataUseTabModel, |
+ data_use_ui_tab_model->GetWeakPtr())); |
+ } |
+#endif // defined(OS_ANDROID) |
} |
content::ResourceContext* |