Chromium Code Reviews| 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 6f1c2a1dda2e2d9737260e8573e110986240c3c2..c40a90b7e4b9962874f73dfe9eb031c7fbb1d106 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,36 @@ 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()) |
| + 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; |
| +} |
| + |
| +// Passes the weak pointer to DataUseTabModel to |data_use_ui_tab_model|. Must |
| +// be called only on UI thread. |
| +void SetDataUseTabModelOnUIThread( |
| + base::WeakPtr<chrome::android::DataUseUITabModel> data_use_ui_tab_model, |
| + base::WeakPtr<chrome::android::DataUseTabModel> data_use_tab_model) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + data_use_ui_tab_model->SetDataUseTabModel(data_use_tab_model); |
| +} |
| +#endif // defined(OS_ANDROID) |
| + |
| } // namespace |
| using content::BrowserThread; |
| @@ -199,6 +236,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(&SetDataUseTabModelOnUIThread, |
|
sclittle
2015/11/25 22:49:11
You could just bind &chrome::android::DataUseUITab
tbansal1
2015/11/26 00:31:21
Done.
|
| + data_use_ui_tab_model->GetWeakPtr())); |
| + } |
| +#endif // defined(OS_ANDROID) |
| } |
| content::ResourceContext* |