Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4766)

Unified Diff: chrome/browser/ui/webui/theme_source.cc

Issue 2278423002: Misc. cleanup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Further cleanup in preparation for removing hack in subsequent patch Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 edc8e481ab72610abf1c7f2e2b79c9ff60fc33c8..68a5f8b834904e57f724501aabb7c2c3b2c97da1 100644
--- a/chrome/browser/ui/webui/theme_source.cc
+++ b/chrome/browser/ui/webui/theme_source.cc
@@ -30,35 +30,36 @@
#include "ui/gfx/image/image_skia_rep.h"
#include "url/gurl.h"
-using content::BrowserThread;
-
namespace {
-GURL GetThemePath(const std::string& path) {
+GURL GetThemeURL(const std::string& path) {
Dan Beam 2016/08/30 01:27:28 guidelines i've heard for new code using 3+ letter
Peter Kasting 2016/08/30 22:51:29 Done.
return GURL(std::string(content::kChromeUIScheme) + "://" +
std::string(chrome::kChromeUIThemeHost) + "/" + path);
}
-// use a resource map rather than hard-coded strings.
-static const char* kNewTabCSSPath = "css/new_tab_theme.css";
-static const char* kNewIncognitoTabCSSPath = "css/incognito_new_tab_theme.css";
+bool IsNewTabCSSPath(const std::string& path) {
Dan Beam 2016/08/30 01:27:29 as well as IsNewTabCssPath() (if this were abbrevi
Peter Kasting 2016/08/30 22:51:29 Done.
+ static const char kNewTabCSSPath[] = "css/new_tab_theme.css";
+ static const char kIncognitoNewTabCSSPath[] =
+ "css/incognito_new_tab_theme.css";
+ return (path == kNewTabCSSPath) || (path == kIncognitoNewTabCSSPath);
Dan Beam 2016/08/30 01:27:29 nit: the C++ style guide discourages () around ret
Peter Kasting 2016/08/30 01:48:46 There's nothing different about the rules for whet
+}
void ProcessImageOnUIThread(const gfx::ImageSkia& image,
- float scale_factor,
+ float scale,
scoped_refptr<base::RefCountedBytes> data) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- const gfx::ImageSkiaRep& rep = image.GetRepresentation(scale_factor);
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ const gfx::ImageSkiaRep& rep = image.GetRepresentation(scale);
gfx::PNGCodec::EncodeBGRASkBitmap(
rep.sk_bitmap(), false /* discard transparency */, &data->data());
}
void ProcessResourceOnUIThread(int resource_id,
- float scale_factor,
+ float scale,
scoped_refptr<base::RefCountedBytes> data) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
ProcessImageOnUIThread(
*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id),
- scale_factor, data);
+ scale, data);
}
} // namespace
@@ -69,8 +70,8 @@ void ProcessResourceOnUIThread(int resource_id,
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, NULL);
+ NTPResourceCache::WindowType win_type =
+ NTPResourceCache::GetWindowType(profile, nullptr);
css_bytes_ =
NTPResourceCacheFactory::GetForProfile(profile)->GetNewTabCSS(win_type);
}
@@ -88,22 +89,19 @@ void ThemeSource::StartDataRequest(
int render_frame_id,
const content::URLDataSource::GotDataCallback& callback) {
// Default scale factor if not specified.
- float scale_factor = 1.0f;
- std::string uncached_path;
- webui::ParsePathAndScale(GetThemePath(path), &uncached_path, &scale_factor);
- scale_factor =
- ui::GetScaleForScaleFactor(ui::GetSupportedScaleFactor(scale_factor));
-
- if (uncached_path == kNewTabCSSPath ||
- uncached_path == kNewIncognitoTabCSSPath) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ float scale = 1.0f;
+ std::string parsed_path;
+ webui::ParsePathAndScale(GetThemeURL(path), &parsed_path, &scale);
+ scale = ui::GetScaleForScaleFactor(ui::GetSupportedScaleFactor(scale));
+ if (IsNewTabCSSPath(parsed_path)) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
callback.Run(css_bytes_.get());
return;
}
int resource_id = -1;
- if (uncached_path == "current-channel-logo") {
+ if (parsed_path == "current-channel-logo") {
switch (chrome::GetChannel()) {
#if defined(GOOGLE_CHROME_BUILD)
case version_info::Channel::CANARY:
@@ -130,55 +128,45 @@ void ThemeSource::StartDataRequest(
break;
}
} else {
- resource_id = ResourcesUtil::GetThemeResourceId(uncached_path);
- }
- if (resource_id != -1) {
- if (GetMimeType(path) == "image/png")
- SendThemeImage(callback, resource_id, scale_factor);
- else
- SendThemeBitmap(callback, resource_id, scale_factor);
- return;
+ resource_id = ResourcesUtil::GetThemeResourceId(parsed_path);
}
- // We don't have any data to send back. This shouldn't happen normally, as
- // chrome://theme/ data source is used only by chrome WebUI pages and
- // component extensions. We don't want to crash in Release build though, as
- // it is possible that a user has entered an unexisting chrome://theme URL
- // into the address bar.
- NOTREACHED() << path << " not found.";
- callback.Run(NULL);
+ const float max_scale = ui::GetScaleForScaleFactor(
Dan Beam 2016/08/30 01:27:29 do we have to get max_scale in the event that reso
Peter Kasting 2016/08/30 01:48:47 Another CL I have LGTM on already that's waiting o
+ ResourceBundle::GetSharedInstance().GetMaxScaleFactor());
+ if (resource_id == -1) {
+ // We have no data to send back. This shouldn't happen normally, as
+ // chrome://theme/ URLs are only used by WebUI pages and component
+ // extensions. However, the user can also enter these into the omnibox, so
+ // we need to fail gracefully.
+ callback.Run(nullptr);
+ } else if ((GetMimeType(path) == "image/png") && (scale > max_scale)) {
Dan Beam 2016/08/30 01:27:29 i don't really see the point to these () either, b
+ SendThemeImage(callback, resource_id, scale);
+ } else {
+ SendThemeBitmap(callback, resource_id, scale);
+ }
}
std::string ThemeSource::GetMimeType(const std::string& path) const {
- std::string uncached_path;
- webui::ParsePathAndScale(GetThemePath(path), &uncached_path, NULL);
-
- if (uncached_path == kNewTabCSSPath ||
- uncached_path == kNewIncognitoTabCSSPath) {
- return "text/css";
- }
-
- return "image/png";
+ std::string parsed_path;
+ webui::ParsePathAndScale(GetThemeURL(path), &parsed_path, nullptr);
+ return IsNewTabCSSPath(parsed_path) ? "text/css" : "image/png";
}
base::MessageLoop* ThemeSource::MessageLoopForRequestPath(
const std::string& path) const {
- std::string uncached_path;
- webui::ParsePathAndScale(GetThemePath(path), &uncached_path, NULL);
+ std::string parsed_path;
+ webui::ParsePathAndScale(GetThemeURL(path), &parsed_path, nullptr);
- if (uncached_path == kNewTabCSSPath ||
- uncached_path == kNewIncognitoTabCSSPath) {
+ if (IsNewTabCSSPath(parsed_path)) {
// We generated and cached this when we initialized the object. We don't
// have to go back to the UI thread to send the data.
- return NULL;
+ return nullptr;
}
// If it's not a themeable image, we don't need to go to the UI thread.
- int resource_id = ResourcesUtil::GetThemeResourceId(uncached_path);
- if (!BrowserThemePack::IsPersistentImageID(resource_id))
- return NULL;
-
- return content::URLDataSource::MessageLoopForRequestPath(path);
+ int resource_id = ResourcesUtil::GetThemeResourceId(parsed_path);
+ return BrowserThemePack::IsPersistentImageID(resource_id) ?
+ content::URLDataSource::MessageLoopForRequestPath(path) : nullptr;
}
bool ThemeSource::ShouldReplaceExistingSource() const {
@@ -188,9 +176,9 @@ bool ThemeSource::ShouldReplaceExistingSource() const {
}
bool ThemeSource::ShouldServiceRequest(const net::URLRequest* request) const {
- if (request->url().SchemeIs(chrome::kChromeSearchScheme))
- return InstantIOContext::ShouldServiceRequest(request);
- return URLDataSource::ShouldServiceRequest(request);
+ return request->url().SchemeIs(chrome::kChromeSearchScheme) ?
+ InstantIOContext::ShouldServiceRequest(request) :
+ URLDataSource::ShouldServiceRequest(request);
}
////////////////////////////////////////////////////////////////////////////////
@@ -199,57 +187,39 @@ bool ThemeSource::ShouldServiceRequest(const net::URLRequest* request) const {
void ThemeSource::SendThemeBitmap(
const content::URLDataSource::GotDataCallback& callback,
int resource_id,
- float scale_factor) {
- ui::ScaleFactor resource_scale_factor =
- ui::GetSupportedScaleFactor(scale_factor);
+ float scale) {
+ ui::ScaleFactor scale_factor = ui::GetSupportedScaleFactor(scale);
if (BrowserThemePack::IsPersistentImageID(resource_id)) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- const ui::ThemeProvider& tp =
- ThemeService::GetThemeProviderForProfile(profile_);
-
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
scoped_refptr<base::RefCountedMemory> image_data(
- tp.GetRawData(resource_id, resource_scale_factor));
+ ThemeService::GetThemeProviderForProfile(profile_).GetRawData(
+ resource_id, scale_factor));
callback.Run(image_data.get());
} else {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
const ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- callback.Run(
- rb.LoadDataResourceBytesForScale(resource_id, resource_scale_factor));
+ callback.Run(rb.LoadDataResourceBytesForScale(resource_id, scale_factor));
}
}
void ThemeSource::SendThemeImage(
const content::URLDataSource::GotDataCallback& callback,
int resource_id,
- float scale_factor) {
- // If the resource bundle contains the data pack for |scale_factor|, we can
- // safely fallback to SendThemeBitmap().
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- if (ui::GetScaleForScaleFactor(rb.GetMaxScaleFactor()) >= scale_factor) {
- SendThemeBitmap(callback, resource_id, scale_factor);
- return;
- }
-
- // Otherwise, we should use gfx::ImageSkia to obtain the data. ImageSkia can
- // rescale the bitmap if its backend doesn't contain the representation for
- // the specified scale factor. This is the fallback path in case chrome is
- // shipped without 2x resource pack but needs to use HighDPI display, which
- // can happen in ChromeOS or Linux.
+ float scale) {
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes());
if (BrowserThemePack::IsPersistentImageID(resource_id)) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
const ui::ThemeProvider& tp =
ThemeService::GetThemeProviderForProfile(profile_);
- ProcessImageOnUIThread(*tp.GetImageSkiaNamed(resource_id), scale_factor,
- data);
+ ProcessImageOnUIThread(*tp.GetImageSkiaNamed(resource_id), scale, data);
callback.Run(data.get());
} else {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
// Fetching image data in ResourceBundle should happen on the UI thread. See
// crbug.com/449277
content::BrowserThread::PostTaskAndReply(
content::BrowserThread::UI, FROM_HERE,
- base::Bind(&ProcessResourceOnUIThread, resource_id, scale_factor, data),
+ base::Bind(&ProcessResourceOnUIThread, resource_id, scale, data),
base::Bind(callback, data));
}
}

Powered by Google App Engine
This is Rietveld 408576698