Index: chrome/browser/ui/webui/chrome_url_data_manager_backend.cc |
=================================================================== |
--- chrome/browser/ui/webui/chrome_url_data_manager_backend.cc (revision 176443) |
+++ chrome/browser/ui/webui/chrome_url_data_manager_backend.cc (working copy) |
@@ -390,11 +390,11 @@ |
// After that, notifies |job| that mime type is available. This method |
// should be called on the UI thread, but notification is performed on |
// the IO thread. |
-void GetMimeTypeOnUI(ChromeURLDataManager::DataSource* source, |
+void GetMimeTypeOnUI(URLDataSource* source, |
const std::string& path, |
const base::WeakPtr<URLRequestChromeJob>& job) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- std::string mime_type = source->GetMimeType(path); |
+ std::string mime_type = source->delegate()->GetMimeType(path); |
BrowserThread::PostTask( |
BrowserThread::IO, FROM_HERE, |
base::Bind(&URLRequestChromeJob::MimeTypeAvailable, job, mime_type)); |
@@ -439,7 +439,11 @@ |
ChromeURLDataManagerBackend::ChromeURLDataManagerBackend() |
: next_request_id_(0) { |
- AddDataSource(new SharedResourcesDataSource()); |
+ content::URLDataSourceDelegate* shared_source = |
+ new SharedResourcesDataSource(); |
+ shared_source->url_data_source_ = |
+ new URLDataSource(shared_source->GetSource(), shared_source); |
+ AddDataSource(shared_source->url_data_source_); |
} |
ChromeURLDataManagerBackend::~ChromeURLDataManagerBackend() { |
@@ -459,11 +463,11 @@ |
} |
void ChromeURLDataManagerBackend::AddDataSource( |
- ChromeURLDataManager::DataSource* source) { |
+ URLDataSource* source) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
DataSourceMap::iterator i = data_sources_.find(source->source_name()); |
if (i != data_sources_.end()) { |
- if (!source->ShouldReplaceExistingSource()) |
+ if (!source->delegate()->ShouldReplaceExistingSource()) |
return; |
i->second->backend_ = NULL; |
} |
@@ -493,26 +497,28 @@ |
if (i == data_sources_.end()) |
return false; |
- ChromeURLDataManager::DataSource* source = i->second; |
+ URLDataSource* source = i->second; |
// Save this request so we know where to send the data. |
RequestID request_id = next_request_id_++; |
pending_requests_.insert(std::make_pair(request_id, job)); |
- job->set_allow_caching(source->AllowCaching()); |
+ job->set_allow_caching(source->delegate()->AllowCaching()); |
const ChromeURLRequestContext* context = |
static_cast<const ChromeURLRequestContext*>(job->request()->context()); |
// Forward along the request to the data source. |
- MessageLoop* target_message_loop = source->MessageLoopForRequestPath(path); |
+ MessageLoop* target_message_loop = |
+ source->delegate()->MessageLoopForRequestPath(path); |
if (!target_message_loop) { |
- job->MimeTypeAvailable(source->GetMimeType(path)); |
+ job->MimeTypeAvailable(source->delegate()->GetMimeType(path)); |
// The DataSource is agnostic to which thread StartDataRequest is called |
// on for this path. Call directly into it from this thread, the IO |
// thread. |
- source->StartDataRequest(path, context->is_incognito(), request_id); |
+ source->delegate()->StartDataRequest( |
+ path, context->is_incognito(), request_id); |
} else { |
// URLRequestChromeJob should receive mime type before data. This |
// is guaranteed because request for mime type is placed in the |
@@ -521,19 +527,28 @@ |
target_message_loop->PostTask( |
FROM_HERE, |
base::Bind(&GetMimeTypeOnUI, |
- scoped_refptr<ChromeURLDataManager::DataSource>(source), |
+ scoped_refptr<URLDataSource>(source), |
path, job->AsWeakPtr())); |
// The DataSource wants StartDataRequest to be called on a specific thread, |
// usually the UI thread, for this path. |
target_message_loop->PostTask( |
FROM_HERE, |
- base::Bind(&ChromeURLDataManager::DataSource::StartDataRequest, source, |
- path, context->is_incognito(), request_id)); |
+ base::Bind(&ChromeURLDataManagerBackend::CallStartRequest, |
+ make_scoped_refptr(source), path, context->is_incognito(), |
+ request_id)); |
} |
return true; |
} |
+void ChromeURLDataManagerBackend::CallStartRequest( |
+ scoped_refptr<URLDataSource> source, |
+ const std::string& path, |
+ bool is_incognito, |
+ int request_id) { |
+ source->delegate()->StartDataRequest(path, is_incognito, request_id); |
+} |
+ |
void ChromeURLDataManagerBackend::RemoveRequest(URLRequestChromeJob* job) { |
// Remove the request from our list of pending requests. |
// If/when the source sends the data that was requested, the data will just |