diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-31 18:06:41 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-31 18:06:41 +0000 |
commit | 421ce19f234e368c674b1e31318cfbb8a222e33b (patch) | |
tree | b24e41b13977a7041baaf8eaeb97934bb21feef8 /ui | |
parent | 45bd8927682e1ad991638755e4233f7e2a9bed16 (diff) | |
download | chromium_src-421ce19f234e368c674b1e31318cfbb8a222e33b.zip chromium_src-421ce19f234e368c674b1e31318cfbb8a222e33b.tar.gz chromium_src-421ce19f234e368c674b1e31318cfbb8a222e33b.tar.bz2 |
Lookup the favicon with the closest scale factor to the one passed in to chrome://touch-icon URL
This allows Android to use window.devicePixelRatio with chrome://touch-icon
Bug=172048
Test=WebUIUtilTest.ParsePathAndScale
Review URL: https://chromiumcodereview.appspot.com/12041064
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179907 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/base/layout.cc | 10 | ||||
-rw-r--r-- | ui/base/layout.h | 17 | ||||
-rw-r--r-- | ui/base/layout_unittest.cc | 23 | ||||
-rw-r--r-- | ui/gfx/image/image_mac_unittest.mm | 9 | ||||
-rw-r--r-- | ui/gfx/image/image_unittest_util.cc | 10 | ||||
-rw-r--r-- | ui/gfx/image/image_unittest_util.h | 2 | ||||
-rw-r--r-- | ui/webui/web_ui_util.cc | 40 | ||||
-rw-r--r-- | ui/webui/web_ui_util.h | 8 | ||||
-rw-r--r-- | ui/webui/web_ui_util_unittest.cc | 38 |
9 files changed, 96 insertions, 61 deletions
diff --git a/ui/base/layout.cc b/ui/base/layout.cc index 66d44f1..1c7c667 100644 --- a/ui/base/layout.cc +++ b/ui/base/layout.cc @@ -203,6 +203,16 @@ void SetSupportedScaleFactors( ScaleFactorComparator); } +ScopedSetSupportedScaleFactors::ScopedSetSupportedScaleFactors( + const std::vector<ui::ScaleFactor>& new_scale_factors) + : original_scale_factors_(GetSupportedScaleFactors()) { + SetSupportedScaleFactors(new_scale_factors); +} + +ScopedSetSupportedScaleFactors::~ScopedSetSupportedScaleFactors() { + SetSupportedScaleFactors(original_scale_factors_); +} + } // namespace test #if !defined(OS_MACOSX) diff --git a/ui/base/layout.h b/ui/base/layout.h index eb150ff..6cc4b94 100644 --- a/ui/base/layout.h +++ b/ui/base/layout.h @@ -70,9 +70,26 @@ UI_EXPORT bool IsScaleFactorSupported(ScaleFactor scale_factor); namespace test { +// Changes the value of GetSupportedScaleFactors() to |scale_factors|. +// Use ScopedSetSupportedScaleFactors for unit tests as not to affect the +// state of other tests. UI_EXPORT void SetSupportedScaleFactors( const std::vector<ScaleFactor>& scale_factors); +// Class which changes the value of GetSupportedScaleFactors() to +// |new_scale_factors| for the duration of its lifetime. +class UI_EXPORT ScopedSetSupportedScaleFactors { + public: + explicit ScopedSetSupportedScaleFactors( + const std::vector<ui::ScaleFactor>& new_scale_factors); + ~ScopedSetSupportedScaleFactors(); + + private: + const std::vector<ui::ScaleFactor> original_scale_factors_; + + DISALLOW_COPY_AND_ASSIGN(ScopedSetSupportedScaleFactors); +}; + } // namespace test } // namespace ui diff --git a/ui/base/layout_unittest.cc b/ui/base/layout_unittest.cc index 8d135a2..13f2794 100644 --- a/ui/base/layout_unittest.cc +++ b/ui/base/layout_unittest.cc @@ -23,13 +23,10 @@ TEST(LayoutTest, GetScaleFactorScale) { } TEST(LayoutTest, GetScaleFactorFromScalePartlySupported) { - std::vector<ScaleFactor> original_supported_factors = - GetSupportedScaleFactors(); - std::vector<ScaleFactor> supported_factors; supported_factors.push_back(SCALE_FACTOR_100P); supported_factors.push_back(SCALE_FACTOR_180P); - test::SetSupportedScaleFactors(supported_factors); + test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors); EXPECT_EQ(SCALE_FACTOR_100P, GetScaleFactorFromScale(0.1f)); EXPECT_EQ(SCALE_FACTOR_100P, GetScaleFactorFromScale(0.9f)); EXPECT_EQ(SCALE_FACTOR_100P, GetScaleFactorFromScale(1.0f)); @@ -38,19 +35,14 @@ TEST(LayoutTest, GetScaleFactorFromScalePartlySupported) { EXPECT_EQ(SCALE_FACTOR_180P, GetScaleFactorFromScale(1.8f)); EXPECT_EQ(SCALE_FACTOR_180P, GetScaleFactorFromScale(2.0f)); EXPECT_EQ(SCALE_FACTOR_180P, GetScaleFactorFromScale(999.0f)); - - test::SetSupportedScaleFactors(original_supported_factors); } TEST(LayoutTest, GetScaleFactorFromScaleAllSupported) { - std::vector<ScaleFactor> original_supported_factors = - GetSupportedScaleFactors(); - std::vector<ScaleFactor> supported_factors; for (int factor = SCALE_FACTOR_100P; factor < NUM_SCALE_FACTORS; ++factor) { supported_factors.push_back(static_cast<ScaleFactor>(factor)); } - test::SetSupportedScaleFactors(supported_factors); + test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors); EXPECT_EQ(SCALE_FACTOR_100P, GetScaleFactorFromScale(0.1f)); EXPECT_EQ(SCALE_FACTOR_100P, GetScaleFactorFromScale(0.9f)); @@ -67,8 +59,6 @@ TEST(LayoutTest, GetScaleFactorFromScaleAllSupported) { EXPECT_EQ(SCALE_FACTOR_200P, GetScaleFactorFromScale(2.0f)); EXPECT_EQ(SCALE_FACTOR_200P, GetScaleFactorFromScale(2.1f)); EXPECT_EQ(SCALE_FACTOR_200P, GetScaleFactorFromScale(999.0f)); - - test::SetSupportedScaleFactors(original_supported_factors); } TEST(LayoutTest, GetMaxScaleFactor) { @@ -78,13 +68,11 @@ TEST(LayoutTest, GetMaxScaleFactor) { // we always have 200P. EXPECT_EQ(SCALE_FACTOR_200P, GetMaxScaleFactor()); #else - std::vector<ScaleFactor> original_supported_factors = - GetSupportedScaleFactors(); { ScaleFactor scale_factors[] = { SCALE_FACTOR_100P }; std::vector<ScaleFactor> supported_factors( scale_factors, scale_factors + arraysize(scale_factors)); - test::SetSupportedScaleFactors(supported_factors); + test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors); EXPECT_EQ(SCALE_FACTOR_100P, GetMaxScaleFactor()); } @@ -93,7 +81,7 @@ TEST(LayoutTest, GetMaxScaleFactor) { SCALE_FACTOR_140P }; std::vector<ScaleFactor> supported_factors( scale_factors, scale_factors + arraysize(scale_factors)); - test::SetSupportedScaleFactors(supported_factors); + test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors); EXPECT_EQ(SCALE_FACTOR_140P, GetMaxScaleFactor()); } @@ -104,10 +92,9 @@ TEST(LayoutTest, GetMaxScaleFactor) { SCALE_FACTOR_100P }; std::vector<ScaleFactor> supported_factors( scale_factors, scale_factors + arraysize(scale_factors)); - test::SetSupportedScaleFactors(supported_factors); + test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors); EXPECT_EQ(SCALE_FACTOR_200P, GetMaxScaleFactor()); } - test::SetSupportedScaleFactors(original_supported_factors); #endif } diff --git a/ui/gfx/image/image_mac_unittest.mm b/ui/gfx/image/image_mac_unittest.mm index 4943c81..fd38d52 100644 --- a/ui/gfx/image/image_mac_unittest.mm +++ b/ui/gfx/image/image_mac_unittest.mm @@ -74,17 +74,16 @@ void BitmapImageRep(int width, int height, class ImageMacTest : public testing::Test { public: - ImageMacTest() { + ImageMacTest() + : supported_scale_factors_(gfx::test::Get1xAnd2xScaleFactors()) { } ~ImageMacTest() { } - virtual void SetUp() OVERRIDE { - gfx::test::SetSupportedScaleFactorsTo1xAnd2x(); - } - private: + ui::test::ScopedSetSupportedScaleFactors supported_scale_factors_; + DISALLOW_COPY_AND_ASSIGN(ImageMacTest); }; diff --git a/ui/gfx/image/image_unittest_util.cc b/ui/gfx/image/image_unittest_util.cc index 72979f82..b011413 100644 --- a/ui/gfx/image/image_unittest_util.cc +++ b/ui/gfx/image/image_unittest_util.cc @@ -48,11 +48,11 @@ bool ColorsClose(SkColor color1, SkColor color2) { } // namespace -void SetSupportedScaleFactorsTo1xAnd2x() { - std::vector<ui::ScaleFactor> supported_scale_factors; - supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); - supported_scale_factors.push_back(ui::SCALE_FACTOR_200P); - ui::test::SetSupportedScaleFactors(supported_scale_factors); +std::vector<ui::ScaleFactor> Get1xAnd2xScaleFactors() { + std::vector<ui::ScaleFactor> scale_factors; + scale_factors.push_back(ui::SCALE_FACTOR_100P); + scale_factors.push_back(ui::SCALE_FACTOR_200P); + return scale_factors; } const SkBitmap CreateBitmap(int width, int height) { diff --git a/ui/gfx/image/image_unittest_util.h b/ui/gfx/image/image_unittest_util.h index 54fdd40..a2293c8 100644 --- a/ui/gfx/image/image_unittest_util.h +++ b/ui/gfx/image/image_unittest_util.h @@ -25,7 +25,7 @@ typedef GdkPixbuf* PlatformImage; typedef gfx::ImageSkia PlatformImage; #endif -void SetSupportedScaleFactorsTo1xAnd2x(); +std::vector<ui::ScaleFactor> Get1xAnd2xScaleFactors(); // Create a bitmap of |width|x|height|. const SkBitmap CreateBitmap(int width, int height); diff --git a/ui/webui/web_ui_util.cc b/ui/webui/web_ui_util.cc index 4c5ed9f..bd061b5 100644 --- a/ui/webui/web_ui_util.cc +++ b/ui/webui/web_ui_util.cc @@ -11,6 +11,7 @@ #include "base/i18n/rtl.h" #include "base/logging.h" #include "base/memory/ref_counted_memory.h" +#include "base/string_number_conversions.h" #include "googleurl/src/gurl.h" #include "net/base/escape.h" #include "grit/app_locale_settings.h" @@ -25,20 +26,6 @@ #include "base/win/windows_version.h" #endif -namespace { - -struct ScaleFactorMap { - const char* name; - ui::ScaleFactor scale_factor; -}; - -const ScaleFactorMap kScaleFactorMap[] = { - { "1x", ui::SCALE_FACTOR_100P }, - { "2x", ui::SCALE_FACTOR_200P }, -}; - -} // namespace - namespace webui { std::string GetBitmapDataUrl(const SkBitmap& bitmap) { @@ -91,13 +78,26 @@ WindowOpenDisposition GetDispositionFromClick(const ListValue* args, bool ParseScaleFactor(const base::StringPiece& identifier, ui::ScaleFactor* scale_factor) { *scale_factor = ui::SCALE_FACTOR_100P; - for (size_t i = 0; i < arraysize(kScaleFactorMap); i++) { - if (identifier == kScaleFactorMap[i].name) { - *scale_factor = kScaleFactorMap[i].scale_factor; - return true; - } + if (identifier.empty()) { + LOG(ERROR) << "Invalid scale factor format: " << identifier; + return false; } - return false; + + if (*identifier.rbegin() != 'x') { + LOG(ERROR) << "Invalid scale factor format: " << identifier; + return false; + } + + double scale = 0; + std::string stripped; + identifier.substr(0, identifier.length() - 1).CopyToString(&stripped); + if (!base::StringToDouble(stripped, &scale)) { + LOG(ERROR) << "Invalid scale factor format: " << identifier; + return false; + } + + *scale_factor = ui::GetScaleFactorFromScale(static_cast<float>(scale)); + return true; } void ParsePathAndScale(const GURL& url, diff --git a/ui/webui/web_ui_util.h b/ui/webui/web_ui_util.h index 7684262..0dcbee5 100644 --- a/ui/webui/web_ui_util.h +++ b/ui/webui/web_ui_util.h @@ -36,10 +36,10 @@ UI_EXPORT std::string GetBitmapDataUrlFromResource(int resource_id); UI_EXPORT WindowOpenDisposition GetDispositionFromClick(const ListValue* args, int start_index); -// Given a scale factor such as "1x" or "2x", sets |scale_factor| to the -// ScaleFactor enum value for this scale factor. If the scale factor could not -// be determined correctly from the string, then |scale_factor| is set to -// SCALE_FACTOR_NONE, and false is returned. +// Given a scale factor such as "1x", "2x" or "1.99x", sets |scale_factor| to +// the closest ScaleFactor enum value for this scale factor. If string can not +// be parsed, then |scale_factor| is set to SCALE_FACTOR_100P, and false is +// returned. UI_EXPORT bool ParseScaleFactor(const base::StringPiece&identifier, ui::ScaleFactor* scale_factor); diff --git a/ui/webui/web_ui_util_unittest.cc b/ui/webui/web_ui_util_unittest.cc index 2c0ef4d..68bcac5 100644 --- a/ui/webui/web_ui_util_unittest.cc +++ b/ui/webui/web_ui_util_unittest.cc @@ -8,26 +8,48 @@ #include "testing/gtest/include/gtest/gtest.h" TEST(WebUIUtilTest, ParsePathAndScale) { - GURL url("http://some/random/username@email/and/more"); + std::vector<ui::ScaleFactor> supported_scale_factors; + supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); + supported_scale_factors.push_back(ui::SCALE_FACTOR_140P); + supported_scale_factors.push_back(ui::SCALE_FACTOR_200P); + ui::test::ScopedSetSupportedScaleFactors scoped_supported( + supported_scale_factors); + std::string path; ui::ScaleFactor factor; + GURL url("http://some/random/username@email/and/more"); webui::ParsePathAndScale(url, &path, &factor); EXPECT_EQ("random/username@email/and/more", path); EXPECT_EQ(ui::SCALE_FACTOR_100P, factor); - GURL url2("http://some/random/username@email/and/more@2x"); + GURL url2("http://some/random/username/and/more"); webui::ParsePathAndScale(url2, &path, &factor); + EXPECT_EQ("random/username/and/more", path); + EXPECT_EQ(ui::SCALE_FACTOR_100P, factor); + + GURL url3("http://some/random/username/and/more@2ax"); + webui::ParsePathAndScale(url3, &path, &factor); + EXPECT_EQ("random/username/and/more@2ax", path); + EXPECT_EQ(ui::SCALE_FACTOR_100P, factor); + + GURL url4("http://some/random/username/and/more@x"); + webui::ParsePathAndScale(url4, &path, &factor); + EXPECT_EQ("random/username/and/more@x", path); + EXPECT_EQ(ui::SCALE_FACTOR_100P, factor); + + GURL url5("http://some/random/username@email/and/more@2x"); + webui::ParsePathAndScale(url5, &path, &factor); EXPECT_EQ("random/username@email/and/more", path); EXPECT_EQ(ui::SCALE_FACTOR_200P, factor); - GURL url3("http://some/random/username/and/more@2x"); - webui::ParsePathAndScale(url3, &path, &factor); + GURL url6("http://some/random/username/and/more@1.4x"); + webui::ParsePathAndScale(url6, &path, &factor); EXPECT_EQ("random/username/and/more", path); - EXPECT_EQ(ui::SCALE_FACTOR_200P, factor); + EXPECT_EQ(ui::SCALE_FACTOR_140P, factor); - GURL url4("http://some/random/username/and/more"); - webui::ParsePathAndScale(url4, &path, &factor); + GURL url7("http://some/random/username/and/more@1.3x"); + webui::ParsePathAndScale(url7, &path, &factor); EXPECT_EQ("random/username/and/more", path); - EXPECT_EQ(ui::SCALE_FACTOR_100P, factor); + EXPECT_EQ(ui::SCALE_FACTOR_140P, factor); } |