15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension_constants.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension_manifest_constants.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "net/base/escape.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/url_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extension_urls { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWebstoreLaunchURL() { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gallery_prefix = kGalleryBrowsePrefix; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAppsGalleryURL)) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefix = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsGalleryURL); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (EndsWith(gallery_prefix, "/", true)) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefix = gallery_prefix.substr(0, gallery_prefix.length() - 1); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gallery_prefix; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetExtensionGalleryURL() { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWebstoreLaunchURL() + "/category/extensions"; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWebstoreItemDetailURLPrefix() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWebstoreLaunchURL() + "/detail/"; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GURL GetWebstoreItemJsonDataURL(const std::string& extension_id) { 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return GURL(GetWebstoreLaunchURL() + "/inlineinstall/detail/" + extension_id); 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GURL GetWebstoreJsonSearchUrl(const std::string& query, const std::string& hl) { 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GURL url(GetWebstoreLaunchURL() + "/jsonsearch"); 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) url = net::AppendQueryParameter(url, "q", query); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) url = net::AppendQueryParameter(url, "hl", hl); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GURL GetWebstoreSearchPageUrl(const std::string& query) { 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return GURL(GetWebstoreLaunchURL() + "/search/" + 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) net::EscapeQueryParamValue(query, false)); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGalleryUpdateHttpsUrl[] = 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://clients2.google.com/service/update2/crx"; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(battre): Delete the HTTP URL once the blacklist is downloaded via HTTPS. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExtensionBlocklistUrlPrefix[] = 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.gstatic.com/chrome/extensions/blacklist"; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExtensionBlocklistHttpsUrlPrefix[] = 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.gstatic.com/chrome/extensions/blacklist"; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetWebstoreUpdateUrl() { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* cmdline = CommandLine::ForCurrentProcess(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cmdline->HasSwitch(switches::kAppsGalleryUpdateURL)) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(cmdline->GetSwitchValueASCII(switches::kAppsGalleryUpdateURL)); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(kGalleryUpdateHttpsUrl); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsWebstoreUpdateUrl(const GURL& update_url) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL store_url = GetWebstoreUpdateUrl(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (update_url == store_url) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (update_url.host() == store_url.host() && 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_url.path() == store_url.path()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsBlacklistUpdateUrl(const GURL& url) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The extension blacklist URL is returned from the update service and 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // therefore not determined by Chromium. If the location of the blacklist file 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ever changes, we need to update this function. A DCHECK in the 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionUpdater ensures that we notice a change. This is the full URL 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of a blacklist: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://www.gstatic.com/chrome/extensions/blacklist/l_0_0_0_7.txt 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return StartsWithASCII(url.spec(), kExtensionBlocklistUrlPrefix, true) || 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartsWithASCII(url.spec(), kExtensionBlocklistHttpsUrlPrefix, true); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGalleryBrowsePrefix[] = "https://chrome.google.com/webstore"; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extension_urls 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extension_misc { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kBookmarkManagerId[] = "eemcgdkfndhakfknompkggombfjjjeno"; 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kChromeAppId[] = "mgndgikekgjfcpckkfioiadnlibdjbkf"; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kCitrixReceiverAppId[] = "haiffjcadagjlijoggckpgfnoeiflnem"; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kCitrixReceiverAppBetaId[] = "gnedhmakppccajfpfiihfcdlnpgomkcf"; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kCitrixReceiverAppDevId[] = "fjcibdnjlbfnbfdjneajpipnlcppleek"; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kCloudPrintAppId[] = "mfehgcgbbipciphmccgaenjidiccnmng"; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kEnterpriseWebStoreAppId[] = "afchcafgojfnemjkcbhfekplkmjaldaa"; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGmailAppId[] = "pjkljhegncpnkpknbcohdijeoejaedia"; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleDocAppId[] = "aohghmighlieiainnegkcijnfilokake"; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGooglePlayMusicAppId[] = "icppfcnhkcmnfdhfhphakoifcfokfdhg"; 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleSearchAppId[] = "coobgpohoikkiipiblmjeljniedjpjpf"; 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleSheetsAppId[] = "felcaaldnbdncclmgdcncolpebgiejap"; 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleSlidesAppId[] = "aapocclcgogkmnckokdopfmhonfmgoek"; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHTermAppId[] = "pnhechapfaindjhompbnflcldabbghjo"; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHTermDevAppId[] = "okddffdblfhhnmhodogpojmfkjmhinfp"; 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kIdentityApiUiAppId[] = "ahjaciijnoiaklcomgnblndopackapon"; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kCroshBuiltinAppId[] = "nkoccljplnhpfnfiajclkommnmllphnl"; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kQuickOfficeComponentExtensionId[] = 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "bpmcpldpdmajfigpchkicefoigmkfalc"; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kQuickOfficeDevExtensionId[] = "ionpfmkccalenbmnddpbmocokhaknphg"; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kQuickOfficeExtensionId[] = "gbkeegbaiigmenfmjfclcdgdpimamgkj"; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kSettingsAppId[] = "ennkphjdgehloodpbhlhldgbnhmacadg"; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kStreamsPrivateTestExtensionId[] = 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "oickdpebdnfbgkcaoklfcdhjniefkcji"; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kWebStoreAppId[] = "ahfgeienlihckogmohjhadlkjgocpleb"; 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kYoutubeAppId[] = "blpcfgokakmgnkcojhhkbfbldkacnbeo"; 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kInAppPaymentsSupportAppId[] = "nmmhkkegccagdldgiimedpiccmgmieda"; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppLaunchHistogram[] = "Extensions.AppLaunch"; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kPlatformAppLaunchHistogram[] = "Apps.AppLaunch"; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kChromeVoxExtensionPath[] = 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "/usr/share/chromeos-assets/accessibility/extensions/access_chromevox"; 128f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles)// The extension id for the built-in component extension. 129f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles)const char kChromeVoxExtensionId[] = 130f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles) "mndnfokpggljbaajbnioimlmbfngpief"; 131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst char kConnectivityDiagnosticsPath[] = 132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "/usr/share/chromeos-assets/connectivity_diagnostics"; 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kConnectivityDiagnosticsLauncherPath[] = 134a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "/usr/share/chromeos-assets/connectivity_diagnostics_launcher"; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSpeechSynthesisExtensionPath[] = 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "/usr/share/chromeos-assets/speech_synthesis/patts"; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSpeechSynthesisExtensionId[] = 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "gjjabgpgjpampikjhjpfhneeoapjbjaf"; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kWallpaperManagerId[] = "obklkkbkpaoaejdabbfldmcfplpdgolj"; 140f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles)#else 141f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles)// The extension id for the web store extension. 142f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles)const char kChromeVoxExtensionId[] = 143f7530a7a2b0c81a081d469940714dcf4d3f2505eTorne (Richard Coles) "kgejglhpjiefppelpmljglcjbhoiplfn"; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateNotInstalled[] = "not_installed"; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateInstalled[] = "installed"; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateDisabled[] = "disabled"; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateRunning[] = "running"; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateCannotRun[] = "cannot_run"; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateReadyToRun[] = "ready_to_run"; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kMediaFileSystemPathPart[] = "_"; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kExtensionIconSizes[] = { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_GIGANTOR, // 512 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_EXTRA_LARGE, // 256 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_LARGE, // 128 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_MEDIUM, // 48 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_SMALL, // 32 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_SMALLISH, // 24 162bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch EXTENSION_ICON_BITTY, // 16 163bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // Additional 2x resources to load. 164bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 2 * EXTENSION_ICON_MEDIUM, // 96 165bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 2 * EXTENSION_ICON_SMALL // 64 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kNumExtensionIconSizes = 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kExtensionIconSizes); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kExtensionActionIconSizes[] = { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_ACTION, // 19, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2 * EXTENSION_ICON_ACTION // 38 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kNumExtensionActionIconSizes = 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kExtensionActionIconSizes); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kScriptBadgeIconSizes[] = { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXTENSION_ICON_BITTY, // 16 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2 * EXTENSION_ICON_BITTY // 32 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kNumScriptBadgeIconSizes = 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kScriptBadgeIconSizes); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extension_misc 188