summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorpkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-31 18:06:41 +0000
committerpkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-31 18:06:41 +0000
commit421ce19f234e368c674b1e31318cfbb8a222e33b (patch)
treeb24e41b13977a7041baaf8eaeb97934bb21feef8 /ui
parent45bd8927682e1ad991638755e4233f7e2a9bed16 (diff)
downloadchromium_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.cc10
-rw-r--r--ui/base/layout.h17
-rw-r--r--ui/base/layout_unittest.cc23
-rw-r--r--ui/gfx/image/image_mac_unittest.mm9
-rw-r--r--ui/gfx/image/image_unittest_util.cc10
-rw-r--r--ui/gfx/image/image_unittest_util.h2
-rw-r--r--ui/webui/web_ui_util.cc40
-rw-r--r--ui/webui/web_ui_util.h8
-rw-r--r--ui/webui/web_ui_util_unittest.cc38
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);
}