| 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/themes/browser_theme_pack.h" | 5 #include "chrome/browser/themes/browser_theme_pack.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/files/file.h" | 9 #include "base/files/file.h" |
| 10 #include "base/memory/ref_counted_memory.h" | 10 #include "base/memory/ref_counted_memory.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 #include "ui/resources/grit/ui_resources.h" | 36 #include "ui/resources/grit/ui_resources.h" |
| 37 | 37 |
| 38 using content::BrowserThread; | 38 using content::BrowserThread; |
| 39 using extensions::Extension; | 39 using extensions::Extension; |
| 40 | 40 |
| 41 namespace { | 41 namespace { |
| 42 | 42 |
| 43 // Version number of the current theme pack. We just throw out and rebuild | 43 // Version number of the current theme pack. We just throw out and rebuild |
| 44 // theme packs that aren't int-equal to this. Increment this number if you | 44 // theme packs that aren't int-equal to this. Increment this number if you |
| 45 // change default theme assets. | 45 // change default theme assets. |
| 46 const int kThemePackVersion = 34; | 46 const int kThemePackVersion = 35; |
| 47 | 47 |
| 48 // IDs that are in the DataPack won't clash with the positive integer | 48 // IDs that are in the DataPack won't clash with the positive integer |
| 49 // uint16. kHeaderID should always have the maximum value because we want the | 49 // uint16. kHeaderID should always have the maximum value because we want the |
| 50 // "header" to be written last. That way we can detect whether the pack was | 50 // "header" to be written last. That way we can detect whether the pack was |
| 51 // successfully written and ignore and regenerate if it was only partially | 51 // successfully written and ignore and regenerate if it was only partially |
| 52 // written (i.e. chrome crashed on a different thread while writing the pack). | 52 // written (i.e. chrome crashed on a different thread while writing the pack). |
| 53 const int kMaxID = 0x0000FFFF; // Max unsigned 16-bit int. | 53 const int kMaxID = 0x0000FFFF; // Max unsigned 16-bit int. |
| 54 const int kHeaderID = kMaxID - 1; | 54 const int kHeaderID = kMaxID - 1; |
| 55 const int kTintsID = kMaxID - 2; | 55 const int kTintsID = kMaxID - 2; |
| 56 const int kColorsID = kMaxID - 3; | 56 const int kColorsID = kMaxID - 3; |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 int idr = kPersistingImagesDesktopAura[i].idr_id; | 231 int idr = kPersistingImagesDesktopAura[i].idr_id; |
| 232 int prs_id = kPersistingImagesDesktopAura[i].persistent_id; | 232 int prs_id = kPersistingImagesDesktopAura[i].persistent_id; |
| 233 (*lookup_table)[idr] = prs_id; | 233 (*lookup_table)[idr] = prs_id; |
| 234 } | 234 } |
| 235 #endif | 235 #endif |
| 236 } | 236 } |
| 237 std::map<int,int>::iterator it = lookup_table->find(idr); | 237 std::map<int,int>::iterator it = lookup_table->find(idr); |
| 238 return (it == lookup_table->end()) ? -1 : it->second; | 238 return (it == lookup_table->end()) ? -1 : it->second; |
| 239 } | 239 } |
| 240 | 240 |
| 241 // Returns the maximum persistent id. |
| 242 int GetMaxPersistentId() { |
| 243 static int max_prs_id = -1; |
| 244 if (max_prs_id == -1) { |
| 245 for (size_t i = 0; i < kPersistingImagesLength; ++i) { |
| 246 if (kPersistingImages[i].persistent_id > max_prs_id) |
| 247 max_prs_id = kPersistingImages[i].persistent_id; |
| 248 } |
| 249 #if defined(USE_ASH) && !defined(OS_CHROMEOS) |
| 250 for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i) { |
| 251 if (kPersistingImagesDesktopAura[i].persistent_id > max_prs_id) |
| 252 max_prs_id = kPersistingImagesDesktopAura[i].persistent_id; |
| 253 } |
| 254 #endif |
| 255 } |
| 256 return max_prs_id; |
| 257 } |
| 258 |
| 241 // Returns true if the scales in |input| match those in |expected|. | 259 // Returns true if the scales in |input| match those in |expected|. |
| 242 // The order must match as the index is used in determining the raw id. | 260 // The order must match as the index is used in determining the raw id. |
| 243 bool InputScalesValid(const base::StringPiece& input, | 261 bool InputScalesValid(const base::StringPiece& input, |
| 244 const std::vector<ui::ScaleFactor>& expected) { | 262 const std::vector<ui::ScaleFactor>& expected) { |
| 245 size_t scales_size = static_cast<size_t>(input.size() / sizeof(float)); | 263 size_t scales_size = static_cast<size_t>(input.size() / sizeof(float)); |
| 246 if (scales_size != expected.size()) | 264 if (scales_size != expected.size()) |
| 247 return false; | 265 return false; |
| 248 scoped_ptr<float[]> scales(new float[scales_size]); | 266 scoped_ptr<float[]> scales(new float[scales_size]); |
| 249 // Do a memcpy to avoid misaligned memory access. | 267 // Do a memcpy to avoid misaligned memory access. |
| 250 memcpy(scales.get(), input.data(), input.size()); | 268 memcpy(scales.get(), input.data(), input.size()); |
| (...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1519 } | 1537 } |
| 1520 | 1538 |
| 1521 int BrowserThemePack::GetRawIDByPersistentID( | 1539 int BrowserThemePack::GetRawIDByPersistentID( |
| 1522 int prs_id, | 1540 int prs_id, |
| 1523 ui::ScaleFactor scale_factor) const { | 1541 ui::ScaleFactor scale_factor) const { |
| 1524 if (prs_id < 0) | 1542 if (prs_id < 0) |
| 1525 return -1; | 1543 return -1; |
| 1526 | 1544 |
| 1527 for (size_t i = 0; i < scale_factors_.size(); ++i) { | 1545 for (size_t i = 0; i < scale_factors_.size(); ++i) { |
| 1528 if (scale_factors_[i] == scale_factor) | 1546 if (scale_factors_[i] == scale_factor) |
| 1529 return static_cast<int>(kPersistingImagesLength * i) + prs_id; | 1547 return ((GetMaxPersistentId() + 1) * i) + prs_id; |
| 1530 } | 1548 } |
| 1531 return -1; | 1549 return -1; |
| 1532 } | 1550 } |
| 1533 | 1551 |
| 1534 bool BrowserThemePack::GetScaleFactorFromManifestKey( | 1552 bool BrowserThemePack::GetScaleFactorFromManifestKey( |
| 1535 const std::string& key, | 1553 const std::string& key, |
| 1536 ui::ScaleFactor* scale_factor) const { | 1554 ui::ScaleFactor* scale_factor) const { |
| 1537 int percent = 0; | 1555 int percent = 0; |
| 1538 if (base::StringToInt(key, &percent)) { | 1556 if (base::StringToInt(key, &percent)) { |
| 1539 float scale = static_cast<float>(percent) / 100.0f; | 1557 float scale = static_cast<float>(percent) / 100.0f; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1612 false, | 1630 false, |
| 1613 &bitmap_data)) { | 1631 &bitmap_data)) { |
| 1614 NOTREACHED() << "Unable to encode theme image for prs_id=" | 1632 NOTREACHED() << "Unable to encode theme image for prs_id=" |
| 1615 << prs_id << " for scale_factor=" << scale_factors_[i]; | 1633 << prs_id << " for scale_factor=" << scale_factors_[i]; |
| 1616 break; | 1634 break; |
| 1617 } | 1635 } |
| 1618 image_memory_[scaled_raw_id] = | 1636 image_memory_[scaled_raw_id] = |
| 1619 base::RefCountedBytes::TakeVector(&bitmap_data); | 1637 base::RefCountedBytes::TakeVector(&bitmap_data); |
| 1620 } | 1638 } |
| 1621 } | 1639 } |
| OLD | NEW |