diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-10 15:26:34 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-10 15:26:34 +0000 |
commit | 248ce19f35b73cdd48ba005c7e4e7b3bc34817fc (patch) | |
tree | 25352120ffe0b8f01e1b0a3c5109e3f9fc35704e /chrome/browser/browser_about_handler.cc | |
parent | 262e8693478039b0d2e786938cffc476ee102a0a (diff) | |
download | chromium_src-248ce19f35b73cdd48ba005c7e4e7b3bc34817fc.zip chromium_src-248ce19f35b73cdd48ba005c7e4e7b3bc34817fc.tar.gz chromium_src-248ce19f35b73cdd48ba005c7e4e7b3bc34817fc.tar.bz2 |
Attempt 3 at: Splits ChromeURLDataManager into 2 chunks:
. ChromeURLDataManager is no longer a singleton and is always used on
the UI thread. ChromeURLDataManager is now profile specific (you get
from the profile).
. ChromeURLDataManagerBackend handles the URLRequests and the
DataSources. ChromeURLDataManagerBackend is created by
ChromeURLRequestContext.
All DataSources are now profile specific. There were two that wanted
to be global, but have been converted.
This differs from the last version in that DataSource::SendResponse
does nothing if the DataSource is schedule for deletion. This is
necessary otherwise SendResponse will up the ref count and by the time
the request is processed on the IO thread chances are the DataSource
will have been deleted. And if it wasn't deleted, it'll get scheduled
for deletion again. <insert comment here about the perils of using
delayed deletion> This has always been possible, it just appears to be
more likely with my patch.
BUG=52022 71868
TEST=none
Review URL: http://codereview.chromium.org/6479007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@74432 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_about_handler.cc')
-rw-r--r-- | chrome/browser/browser_about_handler.cc | 27 |
1 files changed, 3 insertions, 24 deletions
diff --git a/chrome/browser/browser_about_handler.cc b/chrome/browser/browser_about_handler.cc index 9e7b48c..c4747d9 100644 --- a/chrome/browser/browser_about_handler.cc +++ b/chrome/browser/browser_about_handler.cc @@ -160,9 +160,6 @@ const char *kAllAboutPaths[] = { #endif }; -// Points to the singleton AboutSource object, if any. -ChromeURLDataManager::DataSource* about_source = NULL; - // When you type about:memory, it actually loads an intermediate URL that // redirects you to the final page. This avoids the problem where typing // "about:memory" on the new tab page or any other page where a process @@ -692,21 +689,9 @@ std::string VersionNumberToString(uint32 value) { AboutSource::AboutSource() : DataSource(chrome::kAboutScheme, MessageLoop::current()) { - // This should be a singleton. - DCHECK(!about_source); - about_source = this; - - // Add us to the global URL handler on the IO thread. - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - NewRunnableMethod( - ChromeURLDataManager::GetInstance(), - &ChromeURLDataManager::AddDataSource, - make_scoped_refptr(this))); } AboutSource::~AboutSource() { - about_source = NULL; } void AboutSource::StartDataRequest(const std::string& path_raw, @@ -1054,7 +1039,7 @@ bool WillHandleBrowserAboutURL(GURL* url, Profile* profile) { return false; // Anything else requires our special handler; make sure it's initialized. - InitializeAboutDataSource(); + InitializeAboutDataSource(profile); // Special case about:memory to go through a redirect before ending up on // the final page. See GetAboutMemoryRedirectResponse above for why. @@ -1072,14 +1057,8 @@ bool WillHandleBrowserAboutURL(GURL* url, Profile* profile) { return true; } -void InitializeAboutDataSource() { - // We only need to register the AboutSource once and it is kept globally. - // There is currently no way to remove a data source. - static bool initialized = false; - if (!initialized) { - about_source = new AboutSource(); - initialized = true; - } +void InitializeAboutDataSource(Profile* profile) { + profile->GetChromeURLDataManager()->AddDataSource(new AboutSource()); } // This function gets called with the fixed-up chrome: URLs, so we have to |