| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/theme_source.h" | 5 #include "chrome/browser/ui/webui/theme_source.h" |
| 6 | 6 |
| 7 #include "base/memory/ref_counted_memory.h" | 7 #include "base/memory/ref_counted_memory.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 void ProcessResourceOnUiThread(int resource_id, | 56 void ProcessResourceOnUiThread(int resource_id, |
| 57 float scale, | 57 float scale, |
| 58 scoped_refptr<base::RefCountedBytes> data) { | 58 scoped_refptr<base::RefCountedBytes> data) { |
| 59 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 59 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 60 ProcessImageOnUiThread( | 60 ProcessImageOnUiThread( |
| 61 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id), | 61 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id), |
| 62 scale, data); | 62 scale, data); |
| 63 } | 63 } |
| 64 | 64 |
| 65 base::RefCountedMemory* GetNewTabCSSOnUiThread(Profile* profile) { | |
| 66 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
| 67 | |
| 68 NTPResourceCache::WindowType type = | |
| 69 NTPResourceCache::GetWindowType(profile, nullptr); | |
| 70 return NTPResourceCacheFactory::GetForProfile(profile)->GetNewTabCSS(type); | |
| 71 } | |
| 72 | |
| 73 } // namespace | 65 } // namespace |
| 74 | 66 |
| 75 //////////////////////////////////////////////////////////////////////////////// | 67 //////////////////////////////////////////////////////////////////////////////// |
| 76 // ThemeSource, public: | 68 // ThemeSource, public: |
| 77 | 69 |
| 78 ThemeSource::ThemeSource(Profile* profile) : profile_(profile) {} | 70 ThemeSource::ThemeSource(Profile* profile) : profile_(profile) {} |
| 79 | 71 |
| 80 ThemeSource::~ThemeSource() { | 72 ThemeSource::~ThemeSource() = default; |
| 81 } | |
| 82 | 73 |
| 83 std::string ThemeSource::GetSource() const { | 74 std::string ThemeSource::GetSource() const { |
| 84 return chrome::kChromeUIThemeHost; | 75 return chrome::kChromeUIThemeHost; |
| 85 } | 76 } |
| 86 | 77 |
| 87 void ThemeSource::StartDataRequest( | 78 void ThemeSource::StartDataRequest( |
| 88 const std::string& path, | 79 const std::string& path, |
| 89 const content::ResourceRequestInfo::WebContentsGetter& wc_getter, | 80 const content::ResourceRequestInfo::WebContentsGetter& wc_getter, |
| 90 const content::URLDataSource::GotDataCallback& callback) { | 81 const content::URLDataSource::GotDataCallback& callback) { |
| 91 // Default scale factor if not specified. | 82 // Default scale factor if not specified. |
| 92 float scale = 1.0f; | 83 float scale = 1.0f; |
| 93 std::string parsed_path; | 84 std::string parsed_path; |
| 94 webui::ParsePathAndScale(GetThemeUrl(path), &parsed_path, &scale); | 85 webui::ParsePathAndScale(GetThemeUrl(path), &parsed_path, &scale); |
| 95 | 86 |
| 96 if (IsNewTabCssPath(parsed_path)) { | 87 if (IsNewTabCssPath(parsed_path)) { |
| 97 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 88 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 98 // NB: it's important that this is |profile_| and not |original_profile_|. | 89 NTPResourceCache::WindowType type = |
| 99 content::BrowserThread::PostTaskAndReplyWithResult( | 90 NTPResourceCache::GetWindowType(profile_, /*render_host=*/nullptr); |
| 100 content::BrowserThread::UI, FROM_HERE, | 91 NTPResourceCache* cache = NTPResourceCacheFactory::GetForProfile(profile_); |
| 101 base::Bind(&GetNewTabCSSOnUiThread, profile_), callback); | 92 callback.Run(cache->GetNewTabCSS(type)); |
| 102 return; | 93 return; |
| 103 } | 94 } |
| 104 | 95 |
| 105 int resource_id = -1; | 96 int resource_id = -1; |
| 106 if (parsed_path == "current-channel-logo") { | 97 if (parsed_path == "current-channel-logo") { |
| 107 switch (chrome::GetChannel()) { | 98 switch (chrome::GetChannel()) { |
| 108 #if defined(GOOGLE_CHROME_BUILD) | 99 #if defined(GOOGLE_CHROME_BUILD) |
| 109 case version_info::Channel::CANARY: | 100 case version_info::Channel::CANARY: |
| 110 resource_id = IDR_PRODUCT_LOGO_32_CANARY; | 101 resource_id = IDR_PRODUCT_LOGO_32_CANARY; |
| 111 break; | 102 break; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 webui::ParsePathAndScale(GetThemeUrl(path), &parsed_path, nullptr); | 151 webui::ParsePathAndScale(GetThemeUrl(path), &parsed_path, nullptr); |
| 161 return IsNewTabCssPath(parsed_path) ? "text/css" : "image/png"; | 152 return IsNewTabCssPath(parsed_path) ? "text/css" : "image/png"; |
| 162 } | 153 } |
| 163 | 154 |
| 164 scoped_refptr<base::SingleThreadTaskRunner> | 155 scoped_refptr<base::SingleThreadTaskRunner> |
| 165 ThemeSource::TaskRunnerForRequestPath(const std::string& path) const { | 156 ThemeSource::TaskRunnerForRequestPath(const std::string& path) const { |
| 166 std::string parsed_path; | 157 std::string parsed_path; |
| 167 webui::ParsePathAndScale(GetThemeUrl(path), &parsed_path, nullptr); | 158 webui::ParsePathAndScale(GetThemeUrl(path), &parsed_path, nullptr); |
| 168 | 159 |
| 169 if (IsNewTabCssPath(parsed_path)) { | 160 if (IsNewTabCssPath(parsed_path)) { |
| 170 // We generated and cached this when we initialized the object. We don't | 161 // We'll get this data from the NTPResourceCache, which must be accessed on |
| 171 // have to go back to the UI thread to send the data. | 162 // the UI thread. |
| 172 return nullptr; | 163 return content::URLDataSource::TaskRunnerForRequestPath(path); |
| 173 } | 164 } |
| 174 | 165 |
| 175 // If it's not a themeable image, we don't need to go to the UI thread. | 166 // If it's not a themeable image, we don't need to go to the UI thread. |
| 176 int resource_id = ResourcesUtil::GetThemeResourceId(parsed_path); | 167 int resource_id = ResourcesUtil::GetThemeResourceId(parsed_path); |
| 177 return BrowserThemePack::IsPersistentImageID(resource_id) | 168 return BrowserThemePack::IsPersistentImageID(resource_id) |
| 178 ? content::URLDataSource::TaskRunnerForRequestPath(path) | 169 ? content::URLDataSource::TaskRunnerForRequestPath(path) |
| 179 : nullptr; | 170 : nullptr; |
| 180 } | 171 } |
| 181 | 172 |
| 182 bool ThemeSource::AllowCaching() const { | 173 bool ThemeSource::AllowCaching() const { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 } else { | 220 } else { |
| 230 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 221 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 231 // Fetching image data in ResourceBundle should happen on the UI thread. See | 222 // Fetching image data in ResourceBundle should happen on the UI thread. See |
| 232 // crbug.com/449277 | 223 // crbug.com/449277 |
| 233 content::BrowserThread::PostTaskAndReply( | 224 content::BrowserThread::PostTaskAndReply( |
| 234 content::BrowserThread::UI, FROM_HERE, | 225 content::BrowserThread::UI, FROM_HERE, |
| 235 base::BindOnce(&ProcessResourceOnUiThread, resource_id, scale, data), | 226 base::BindOnce(&ProcessResourceOnUiThread, resource_id, scale, data), |
| 236 base::BindOnce(callback, data)); | 227 base::BindOnce(callback, data)); |
| 237 } | 228 } |
| 238 } | 229 } |
| OLD | NEW |