| 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #if defined(TOOLKIT_GTK) | 7 #if defined(TOOLKIT_GTK) |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 52 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 53 gfx::ImageSkia bg = *rb.GetImageSkiaNamed(IDR_BROWSER_ACTION); | 53 gfx::ImageSkia bg = *rb.GetImageSkiaNamed(IDR_BROWSER_ACTION); |
| 54 return gfx::ImageSkiaOperations::CreateSuperimposedImage(bg, icon); | 54 return gfx::ImageSkiaOperations::CreateSuperimposedImage(bg, icon); |
| 55 #endif | 55 #endif |
| 56 | 56 |
| 57 return icon; | 57 return icon; |
| 58 } | 58 } |
| 59 | 59 |
| 60 bool ImagesAreEqualAtScale(const gfx::ImageSkia& i1, | 60 bool ImagesAreEqualAtScale(const gfx::ImageSkia& i1, |
| 61 const gfx::ImageSkia& i2, | 61 const gfx::ImageSkia& i2, |
| 62 ui::ScaleFactor scale_factor) { | 62 float scale) { |
| 63 SkBitmap bitmap1 = i1.GetRepresentation(scale_factor).sk_bitmap(); | 63 SkBitmap bitmap1 = i1.GetRepresentation(scale).sk_bitmap(); |
| 64 SkBitmap bitmap2 = i2.GetRepresentation(scale_factor).sk_bitmap(); | 64 SkBitmap bitmap2 = i2.GetRepresentation(scale).sk_bitmap(); |
| 65 return gfx::BitmapsAreEqual(bitmap1, bitmap2); | 65 return gfx::BitmapsAreEqual(bitmap1, bitmap2); |
| 66 } | 66 } |
| 67 | 67 |
| 68 class BrowserActionApiTest : public ExtensionApiTest { | 68 class BrowserActionApiTest : public ExtensionApiTest { |
| 69 public: | 69 public: |
| 70 BrowserActionApiTest() {} | 70 BrowserActionApiTest() {} |
| 71 virtual ~BrowserActionApiTest() {} | 71 virtual ~BrowserActionApiTest() {} |
| 72 | 72 |
| 73 protected: | 73 protected: |
| 74 BrowserActionTestUtil GetBrowserActionsBar() { | 74 BrowserActionTestUtil GetBrowserActionsBar() { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 ASSERT_TRUE(RunExtensionTest("browser_action/no_icon")) << message_; | 129 ASSERT_TRUE(RunExtensionTest("browser_action/no_icon")) << message_; |
| 130 const Extension* extension = GetSingleLoadedExtension(); | 130 const Extension* extension = GetSingleLoadedExtension(); |
| 131 ASSERT_TRUE(extension) << message_; | 131 ASSERT_TRUE(extension) << message_; |
| 132 | 132 |
| 133 #if defined (OS_MACOSX) | 133 #if defined (OS_MACOSX) |
| 134 // We need this on mac so we don't loose 2x representations from browser icon | 134 // We need this on mac so we don't loose 2x representations from browser icon |
| 135 // in transformations gfx::ImageSkia -> NSImage -> gfx::ImageSkia. | 135 // in transformations gfx::ImageSkia -> NSImage -> gfx::ImageSkia. |
| 136 std::vector<ui::ScaleFactor> supported_scale_factors; | 136 std::vector<ui::ScaleFactor> supported_scale_factors; |
| 137 supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); | 137 supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); |
| 138 supported_scale_factors.push_back(ui::SCALE_FACTOR_200P); | 138 supported_scale_factors.push_back(ui::SCALE_FACTOR_200P); |
| 139 ui::test::SetSupportedScaleFactors(supported_scale_factors); | 139 ui::SetSupportedScaleFactors(supported_scale_factors); |
| 140 #endif | 140 #endif |
| 141 | 141 |
| 142 // We should not be creating icons asynchronously, so we don't need an | 142 // We should not be creating icons asynchronously, so we don't need an |
| 143 // observer. | 143 // observer. |
| 144 ExtensionActionIconFactory icon_factory( | 144 ExtensionActionIconFactory icon_factory( |
| 145 profile(), | 145 profile(), |
| 146 extension, | 146 extension, |
| 147 GetBrowserAction(*extension), | 147 GetBrowserAction(*extension), |
| 148 NULL); | 148 NULL); |
| 149 // Test that there is a browser action in the toolbar. | 149 // Test that there is a browser action in the toolbar. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 164 // Tell the extension to update the icon using ImageData object. | 164 // Tell the extension to update the icon using ImageData object. |
| 165 GetBrowserActionsBar().Press(0); | 165 GetBrowserActionsBar().Press(0); |
| 166 ASSERT_TRUE(catcher.GetNextResult()); | 166 ASSERT_TRUE(catcher.GetNextResult()); |
| 167 | 167 |
| 168 action_icon = icon_factory.GetIcon(0); | 168 action_icon = icon_factory.GetIcon(0); |
| 169 | 169 |
| 170 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 170 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 171 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 171 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 172 action_icon_last_id = action_icon_current_id; | 172 action_icon_last_id = action_icon_current_id; |
| 173 | 173 |
| 174 EXPECT_FALSE( | 174 EXPECT_FALSE(action_icon.ToImageSkia()->HasRepresentation(2.0f)); |
| 175 action_icon.ToImageSkia()->HasRepresentation(ui::SCALE_FACTOR_200P)); | |
| 176 | 175 |
| 177 EXPECT_TRUE(ImagesAreEqualAtScale( | 176 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 178 AddBackgroundForViews(*action_icon.ToImageSkia()), | 177 AddBackgroundForViews(*action_icon.ToImageSkia()), |
| 179 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 178 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 180 ui::SCALE_FACTOR_100P)); | 179 1.0f)); |
| 181 | 180 |
| 182 // Tell the extension to update the icon using path. | 181 // Tell the extension to update the icon using path. |
| 183 GetBrowserActionsBar().Press(0); | 182 GetBrowserActionsBar().Press(0); |
| 184 ASSERT_TRUE(catcher.GetNextResult()); | 183 ASSERT_TRUE(catcher.GetNextResult()); |
| 185 | 184 |
| 186 action_icon = icon_factory.GetIcon(0); | 185 action_icon = icon_factory.GetIcon(0); |
| 187 | 186 |
| 188 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 187 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 189 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 188 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 190 action_icon_last_id = action_icon_current_id; | 189 action_icon_last_id = action_icon_current_id; |
| 191 | 190 |
| 192 EXPECT_FALSE( | 191 EXPECT_FALSE( |
| 193 action_icon.ToImageSkia()->HasRepresentation(ui::SCALE_FACTOR_200P)); | 192 action_icon.ToImageSkia()->HasRepresentation(2.0f)); |
| 194 | 193 |
| 195 EXPECT_TRUE(ImagesAreEqualAtScale( | 194 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 196 AddBackgroundForViews(*action_icon.ToImageSkia()), | 195 AddBackgroundForViews(*action_icon.ToImageSkia()), |
| 197 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 196 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 198 ui::SCALE_FACTOR_100P)); | 197 1.0f)); |
| 199 | 198 |
| 200 // Tell the extension to update the icon using dictionary of ImageData | 199 // Tell the extension to update the icon using dictionary of ImageData |
| 201 // objects. | 200 // objects. |
| 202 GetBrowserActionsBar().Press(0); | 201 GetBrowserActionsBar().Press(0); |
| 203 ASSERT_TRUE(catcher.GetNextResult()); | 202 ASSERT_TRUE(catcher.GetNextResult()); |
| 204 | 203 |
| 205 action_icon = icon_factory.GetIcon(0); | 204 action_icon = icon_factory.GetIcon(0); |
| 206 | 205 |
| 207 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 206 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 208 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 207 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 209 action_icon_last_id = action_icon_current_id; | 208 action_icon_last_id = action_icon_current_id; |
| 210 | 209 |
| 211 EXPECT_TRUE( | 210 EXPECT_TRUE(action_icon.ToImageSkia()->HasRepresentation(2.0f)); |
| 212 action_icon.ToImageSkia()->HasRepresentation(ui::SCALE_FACTOR_200P)); | |
| 213 | 211 |
| 214 EXPECT_TRUE(ImagesAreEqualAtScale( | 212 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 215 AddBackgroundForViews(*action_icon.ToImageSkia()), | 213 AddBackgroundForViews(*action_icon.ToImageSkia()), |
| 216 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 214 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 217 ui::SCALE_FACTOR_100P)); | 215 1.0f)); |
| 218 | 216 |
| 219 // Tell the extension to update the icon using dictionary of paths. | 217 // Tell the extension to update the icon using dictionary of paths. |
| 220 GetBrowserActionsBar().Press(0); | 218 GetBrowserActionsBar().Press(0); |
| 221 ASSERT_TRUE(catcher.GetNextResult()); | 219 ASSERT_TRUE(catcher.GetNextResult()); |
| 222 | 220 |
| 223 action_icon = icon_factory.GetIcon(0); | 221 action_icon = icon_factory.GetIcon(0); |
| 224 | 222 |
| 225 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 223 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 226 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 224 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 227 action_icon_last_id = action_icon_current_id; | 225 action_icon_last_id = action_icon_current_id; |
| 228 | 226 |
| 229 EXPECT_TRUE( | 227 EXPECT_TRUE(action_icon.ToImageSkia()->HasRepresentation(2.0f)); |
| 230 action_icon.ToImageSkia()->HasRepresentation(ui::SCALE_FACTOR_200P)); | |
| 231 | 228 |
| 232 EXPECT_TRUE(ImagesAreEqualAtScale( | 229 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 233 AddBackgroundForViews(*action_icon.ToImageSkia()), | 230 AddBackgroundForViews(*action_icon.ToImageSkia()), |
| 234 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 231 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 235 ui::SCALE_FACTOR_100P)); | 232 1.0f)); |
| 236 | 233 |
| 237 // Tell the extension to update the icon using dictionary of ImageData | 234 // Tell the extension to update the icon using dictionary of ImageData |
| 238 // objects, but setting only size 19. | 235 // objects, but setting only size 19. |
| 239 GetBrowserActionsBar().Press(0); | 236 GetBrowserActionsBar().Press(0); |
| 240 ASSERT_TRUE(catcher.GetNextResult()); | 237 ASSERT_TRUE(catcher.GetNextResult()); |
| 241 | 238 |
| 242 action_icon = icon_factory.GetIcon(0); | 239 action_icon = icon_factory.GetIcon(0); |
| 243 | 240 |
| 244 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 241 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 245 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 242 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 246 action_icon_last_id = action_icon_current_id; | 243 action_icon_last_id = action_icon_current_id; |
| 247 | 244 |
| 248 EXPECT_FALSE( | 245 EXPECT_FALSE(action_icon.ToImageSkia()->HasRepresentation(2.0f)); |
| 249 action_icon.ToImageSkia()->HasRepresentation(ui::SCALE_FACTOR_200P)); | |
| 250 | 246 |
| 251 EXPECT_TRUE(ImagesAreEqualAtScale( | 247 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 252 AddBackgroundForViews(*action_icon.ToImageSkia()), | 248 AddBackgroundForViews(*action_icon.ToImageSkia()), |
| 253 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 249 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 254 ui::SCALE_FACTOR_100P)); | 250 1.0f)); |
| 255 | 251 |
| 256 // Tell the extension to update the icon using dictionary of paths, but | 252 // Tell the extension to update the icon using dictionary of paths, but |
| 257 // setting only size 19. | 253 // setting only size 19. |
| 258 GetBrowserActionsBar().Press(0); | 254 GetBrowserActionsBar().Press(0); |
| 259 ASSERT_TRUE(catcher.GetNextResult()); | 255 ASSERT_TRUE(catcher.GetNextResult()); |
| 260 | 256 |
| 261 action_icon = icon_factory.GetIcon(0); | 257 action_icon = icon_factory.GetIcon(0); |
| 262 | 258 |
| 263 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 259 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 264 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 260 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 265 action_icon_last_id = action_icon_current_id; | 261 action_icon_last_id = action_icon_current_id; |
| 266 | 262 |
| 267 EXPECT_FALSE( | 263 EXPECT_FALSE(action_icon.ToImageSkia()->HasRepresentation(2.0f)); |
| 268 action_icon.ToImageSkia()->HasRepresentation(ui::SCALE_FACTOR_200P)); | |
| 269 | 264 |
| 270 EXPECT_TRUE(ImagesAreEqualAtScale( | 265 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 271 AddBackgroundForViews(*action_icon.ToImageSkia()), | 266 AddBackgroundForViews(*action_icon.ToImageSkia()), |
| 272 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 267 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 273 ui::SCALE_FACTOR_100P)); | 268 1.0f)); |
| 274 | 269 |
| 275 // Tell the extension to update the icon using dictionary of ImageData | 270 // Tell the extension to update the icon using dictionary of ImageData |
| 276 // objects, but setting only size 38. | 271 // objects, but setting only size 38. |
| 277 GetBrowserActionsBar().Press(0); | 272 GetBrowserActionsBar().Press(0); |
| 278 ASSERT_TRUE(catcher.GetNextResult()); | 273 ASSERT_TRUE(catcher.GetNextResult()); |
| 279 | 274 |
| 280 action_icon = icon_factory.GetIcon(0); | 275 action_icon = icon_factory.GetIcon(0); |
| 281 | 276 |
| 282 const gfx::ImageSkia* action_icon_skia = action_icon.ToImageSkia(); | 277 const gfx::ImageSkia* action_icon_skia = action_icon.ToImageSkia(); |
| 283 | 278 |
| 284 EXPECT_FALSE(action_icon_skia->HasRepresentation(ui::SCALE_FACTOR_100P)); | 279 EXPECT_FALSE(action_icon_skia->HasRepresentation(1.0f)); |
| 285 EXPECT_TRUE(action_icon_skia->HasRepresentation(ui::SCALE_FACTOR_200P)); | 280 EXPECT_TRUE(action_icon_skia->HasRepresentation(2.0f)); |
| 286 | 281 |
| 287 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); | 282 action_icon_current_id = action_icon.ToSkBitmap()->getGenerationID(); |
| 288 EXPECT_GT(action_icon_current_id, action_icon_last_id); | 283 EXPECT_GT(action_icon_current_id, action_icon_last_id); |
| 289 action_icon_last_id = action_icon_current_id; | 284 action_icon_last_id = action_icon_current_id; |
| 290 | 285 |
| 291 EXPECT_TRUE(gfx::BitmapsAreEqual( | 286 EXPECT_TRUE(gfx::BitmapsAreEqual( |
| 292 *action_icon.ToSkBitmap(), | 287 *action_icon.ToSkBitmap(), |
| 293 action_icon_skia->GetRepresentation(ui::SCALE_FACTOR_200P).sk_bitmap())); | 288 action_icon_skia->GetRepresentation(2.0f).sk_bitmap())); |
| 294 | 289 |
| 295 EXPECT_TRUE(ImagesAreEqualAtScale( | 290 EXPECT_TRUE(ImagesAreEqualAtScale( |
| 296 AddBackgroundForViews(*action_icon_skia), | 291 AddBackgroundForViews(*action_icon_skia), |
| 297 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), | 292 *GetBrowserActionsBar().GetIcon(0).ToImageSkia(), |
| 298 ui::SCALE_FACTOR_200P)); | 293 2.0f)); |
| 299 | 294 |
| 300 // Try setting icon with empty dictionary of ImageData objects. | 295 // Try setting icon with empty dictionary of ImageData objects. |
| 301 GetBrowserActionsBar().Press(0); | 296 GetBrowserActionsBar().Press(0); |
| 302 ASSERT_FALSE(catcher.GetNextResult()); | 297 ASSERT_FALSE(catcher.GetNextResult()); |
| 303 EXPECT_EQ(kEmptyImageDataError, catcher.message()); | 298 EXPECT_EQ(kEmptyImageDataError, catcher.message()); |
| 304 | 299 |
| 305 // Try setting icon with empty dictionary of path objects. | 300 // Try setting icon with empty dictionary of path objects. |
| 306 GetBrowserActionsBar().Press(0); | 301 GetBrowserActionsBar().Press(0); |
| 307 ASSERT_FALSE(catcher.GetNextResult()); | 302 ASSERT_FALSE(catcher.GetNextResult()); |
| 308 EXPECT_EQ(kEmptyPathError, catcher.message()); | 303 EXPECT_EQ(kEmptyPathError, catcher.message()); |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 "backgroundColor);"; | 688 "backgroundColor);"; |
| 694 std::string result; | 689 std::string result; |
| 695 const std::string frame_xpath; | 690 const std::string frame_xpath; |
| 696 EXPECT_TRUE(content::ExecuteScriptInFrameAndExtractString( | 691 EXPECT_TRUE(content::ExecuteScriptInFrameAndExtractString( |
| 697 tab, frame_xpath, script, &result)); | 692 tab, frame_xpath, script, &result)); |
| 698 EXPECT_EQ(result, "red"); | 693 EXPECT_EQ(result, "red"); |
| 699 } | 694 } |
| 700 | 695 |
| 701 } // namespace | 696 } // namespace |
| 702 } // namespace extensions | 697 } // namespace extensions |
| OLD | NEW |