Chromium Code Reviews| Index: chrome/browser/ui/webui/chrome_url_data_manager.cc |
| =================================================================== |
| --- chrome/browser/ui/webui/chrome_url_data_manager.cc (revision 176443) |
| +++ chrome/browser/ui/webui/chrome_url_data_manager.cc (working copy) |
| @@ -20,6 +20,7 @@ |
| #include "chrome/browser/ui/webui/chrome_url_data_manager_factory.h" |
| #include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/url_data_source_delegate.h" |
| #include "grit/platform_locale_settings.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -38,12 +39,12 @@ |
| g_delete_lock = LAZY_INSTANCE_INITIALIZER; |
| // static |
| -ChromeURLDataManager::DataSources* ChromeURLDataManager::data_sources_ = NULL; |
| +ChromeURLDataManager::URLDataSources* ChromeURLDataManager::data_sources_ = NULL; |
|
James Hawkins
2013/01/14 19:24:33
80 cols.
jam
2013/01/14 20:25:14
Done.
|
| // Invoked on the IO thread to do the actual adding of the DataSource. |
| static void AddDataSourceOnIOThread( |
| const base::Callback<ChromeURLDataManagerBackend*(void)>& backend, |
| - scoped_refptr<ChromeURLDataManager::DataSource> data_source) { |
| + scoped_refptr<URLDataSource> data_source) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| backend.Run()->AddDataSource(data_source.get()); |
| } |
| @@ -56,7 +57,7 @@ |
| ChromeURLDataManager::~ChromeURLDataManager() { |
| } |
| -void ChromeURLDataManager::AddDataSource(DataSource* source) { |
| +void ChromeURLDataManager::AddDataSource(URLDataSource* source) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| @@ -67,7 +68,7 @@ |
| // static |
| void ChromeURLDataManager::DeleteDataSources() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - DataSources sources; |
| + URLDataSources sources; |
| { |
| base::AutoLock lock(g_delete_lock.Get()); |
| if (!data_sources_) |
| @@ -79,7 +80,7 @@ |
| } |
| // static |
| -void ChromeURLDataManager::DeleteDataSource(const DataSource* data_source) { |
| +void ChromeURLDataManager::DeleteDataSource(const URLDataSource* data_source) { |
| // Invoked when a DataSource is no longer referenced and needs to be deleted. |
| if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| // We're on the UI thread, delete right away. |
| @@ -93,7 +94,7 @@ |
| { |
| base::AutoLock lock(g_delete_lock.Get()); |
| if (!data_sources_) |
| - data_sources_ = new DataSources(); |
| + data_sources_ = new URLDataSources(); |
| schedule_delete = data_sources_->empty(); |
| data_sources_->push_back(data_source); |
| } |
| @@ -106,13 +107,20 @@ |
| } |
| // static |
| -void ChromeURLDataManager::AddDataSource(Profile* profile, DataSource* source) { |
| - ChromeURLDataManagerFactory::GetForProfile(profile)->AddDataSource(source); |
| +void ChromeURLDataManager::AddDataSource( |
| + Profile* profile, |
| + content::URLDataSourceDelegate* delegate) { |
| + if (!delegate->url_data_source_) { |
| + delegate->url_data_source_ = new URLDataSource( |
| + delegate->GetSource(), delegate); |
| + } |
| + ChromeURLDataManagerFactory::GetForProfile(profile)->AddDataSource( |
| + delegate->url_data_source_); |
| } |
| // static |
| bool ChromeURLDataManager::IsScheduledForDeletion( |
| - const DataSource* data_source) { |
| + const URLDataSource* data_source) { |
| base::AutoLock lock(g_delete_lock.Get()); |
| if (!data_sources_) |
| return false; |
| @@ -120,22 +128,22 @@ |
| data_sources_->end(); |
| } |
| -ChromeURLDataManager::DataSource::DataSource(const std::string& source_name, |
| - MessageLoop* message_loop) |
| +URLDataSource::URLDataSource(const std::string& source_name, |
| + content::URLDataSourceDelegate* delegate) |
| : source_name_(source_name), |
| - message_loop_(message_loop), |
| - backend_(NULL) { |
| + backend_(NULL), |
| + delegate_(delegate) { |
| } |
| -ChromeURLDataManager::DataSource::~DataSource() { |
| +URLDataSource::~URLDataSource() { |
| } |
| -void ChromeURLDataManager::DataSource::SendResponse( |
| +void URLDataSource::SendResponse( |
| int request_id, |
| base::RefCountedMemory* bytes) { |
| // Take a ref-pointer on entry so byte->Release() will always get called. |
| scoped_refptr<base::RefCountedMemory> bytes_ptr(bytes); |
| - if (IsScheduledForDeletion(this)) { |
| + if (ChromeURLDataManager::IsScheduledForDeletion(this)) { |
| // We're scheduled for deletion. Servicing the request would result in |
| // this->AddRef being invoked, even though the ref count is 0 and 'this' is |
| // about to be deleted. If the AddRef were allowed through, when 'this' is |
| @@ -151,23 +159,12 @@ |
| } |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| - base::Bind(&DataSource::SendResponseOnIOThread, this, request_id, |
| + base::Bind(&URLDataSource::SendResponseOnIOThread, this, request_id, |
| bytes_ptr)); |
| } |
| -MessageLoop* ChromeURLDataManager::DataSource::MessageLoopForRequestPath( |
| - const std::string& path) const { |
| - return message_loop_; |
| -} |
| - |
| -bool ChromeURLDataManager::DataSource::ShouldReplaceExistingSource() const { |
| - return true; |
| -} |
| - |
| -bool ChromeURLDataManager::DataSource::AllowCaching() const { return true; } |
| - |
| // static |
| -void ChromeURLDataManager::DataSource::SetFontAndTextDirection( |
| +void URLDataSource::SetFontAndTextDirection( |
| DictionaryValue* localized_strings) { |
| int web_font_family_id = IDS_WEB_FONT_FAMILY; |
| int web_font_size_id = IDS_WEB_FONT_SIZE; |
| @@ -195,7 +192,7 @@ |
| base::i18n::IsRTL() ? "rtl" : "ltr"); |
| } |
| -void ChromeURLDataManager::DataSource::SendResponseOnIOThread( |
| +void URLDataSource::SendResponseOnIOThread( |
| int request_id, |
| scoped_refptr<base::RefCountedMemory> bytes) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |