Index: chrome/browser/ui/webui/theme_source.cc |
diff --git a/chrome/browser/ui/webui/theme_source.cc b/chrome/browser/ui/webui/theme_source.cc |
index 8e5de32c452c9535570c46d3c463ab3d632b134e..1382f7b0bb8a548be3788279752849ee1312cba8 100644 |
--- a/chrome/browser/ui/webui/theme_source.cc |
+++ b/chrome/browser/ui/webui/theme_source.cc |
@@ -44,7 +44,7 @@ bool IsNewTabCssPath(const std::string& path) { |
return (path == kNewTabCSSPath) || (path == kIncognitoNewTabCSSPath); |
} |
-void ProcessImageOnUIThread(const gfx::ImageSkia& image, |
+void ProcessImageOnUiThread(const gfx::ImageSkia& image, |
float scale, |
scoped_refptr<base::RefCountedBytes> data) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
@@ -53,28 +53,29 @@ void ProcessImageOnUIThread(const gfx::ImageSkia& image, |
rep.sk_bitmap(), false /* discard transparency */, &data->data()); |
} |
-void ProcessResourceOnUIThread(int resource_id, |
+void ProcessResourceOnUiThread(int resource_id, |
float scale, |
scoped_refptr<base::RefCountedBytes> data) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
- ProcessImageOnUIThread( |
+ ProcessImageOnUiThread( |
*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id), |
scale, data); |
} |
+base::RefCountedMemory* GetNewTabCSSOnUiThread(Profile* profile) { |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
+ |
+ NTPResourceCache::WindowType type = |
+ NTPResourceCache::GetWindowType(profile, nullptr); |
+ return NTPResourceCacheFactory::GetForProfile(profile)->GetNewTabCSS(type); |
+} |
+ |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
// ThemeSource, public: |
-ThemeSource::ThemeSource(Profile* profile) |
- : profile_(profile->GetOriginalProfile()) { |
- // NB: it's important that this is |profile| and not |profile_|. |
- NTPResourceCache::WindowType win_type = |
- NTPResourceCache::GetWindowType(profile, nullptr); |
- css_bytes_ = |
- NTPResourceCacheFactory::GetForProfile(profile)->GetNewTabCSS(win_type); |
-} |
+ThemeSource::ThemeSource(Profile* profile) : profile_(profile) {} |
ThemeSource::~ThemeSource() { |
} |
@@ -95,7 +96,10 @@ void ThemeSource::StartDataRequest( |
if (IsNewTabCssPath(parsed_path)) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
- callback.Run(css_bytes_.get()); |
+ // NB: it's important that this is |profile_| and not |original_profile_|. |
+ content::BrowserThread::PostTaskAndReplyWithResult( |
+ content::BrowserThread::UI, FROM_HERE, |
+ base::Bind(&GetNewTabCSSOnUiThread, profile_), callback); |
return; |
} |
@@ -175,12 +179,6 @@ base::MessageLoop* ThemeSource::MessageLoopForRequestPath( |
content::URLDataSource::MessageLoopForRequestPath(path) : nullptr; |
} |
-bool ThemeSource::ShouldReplaceExistingSource() const { |
- // We currently get the css_bytes_ in the ThemeSource constructor, so we need |
- // to recreate the source itself when a theme changes. |
- return true; |
-} |
- |
bool ThemeSource::ShouldServiceRequest(const net::URLRequest* request) const { |
return request->url().SchemeIs(chrome::kChromeSearchScheme) ? |
InstantIOContext::ShouldServiceRequest(request) : |
@@ -198,8 +196,8 @@ void ThemeSource::SendThemeBitmap( |
if (BrowserThemePack::IsPersistentImageID(resource_id)) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
scoped_refptr<base::RefCountedMemory> image_data( |
- ThemeService::GetThemeProviderForProfile(profile_).GetRawData( |
- resource_id, scale_factor)); |
+ ThemeService::GetThemeProviderForProfile(profile_->GetOriginalProfile()) |
+ .GetRawData(resource_id, scale_factor)); |
callback.Run(image_data.get()); |
} else { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
@@ -215,9 +213,9 @@ void ThemeSource::SendThemeImage( |
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes()); |
if (BrowserThemePack::IsPersistentImageID(resource_id)) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
- const ui::ThemeProvider& tp = |
- ThemeService::GetThemeProviderForProfile(profile_); |
- ProcessImageOnUIThread(*tp.GetImageSkiaNamed(resource_id), scale, data); |
+ const ui::ThemeProvider& tp = ThemeService::GetThemeProviderForProfile( |
+ profile_->GetOriginalProfile()); |
+ ProcessImageOnUiThread(*tp.GetImageSkiaNamed(resource_id), scale, data); |
callback.Run(data.get()); |
} else { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
@@ -225,7 +223,7 @@ void ThemeSource::SendThemeImage( |
// crbug.com/449277 |
content::BrowserThread::PostTaskAndReply( |
content::BrowserThread::UI, FROM_HERE, |
- base::Bind(&ProcessResourceOnUIThread, resource_id, scale, data), |
+ base::Bind(&ProcessResourceOnUiThread, resource_id, scale, data), |
base::Bind(callback, data)); |
} |
} |