extension_constants.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "net/base/escape.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/url_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extension_urls {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWebstoreLaunchURL() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string gallery_prefix = kGalleryBrowsePrefix;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAppsGalleryURL))
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gallery_prefix = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        switches::kAppsGalleryURL);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (EndsWith(gallery_prefix, "/", true))
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gallery_prefix = gallery_prefix.substr(0, gallery_prefix.length() - 1);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gallery_prefix;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetExtensionGalleryURL() {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetWebstoreLaunchURL() + "/category/extensions";
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWebstoreItemDetailURLPrefix() {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetWebstoreLaunchURL() + "/detail/";
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GURL GetWebstoreItemJsonDataURL(const std::string& extension_id) {
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return GURL(GetWebstoreLaunchURL() + "/inlineinstall/detail/" + extension_id);
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GURL GetWebstoreJsonSearchUrl(const std::string& query, const std::string& hl) {
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  GURL url(GetWebstoreLaunchURL() + "/jsonsearch");
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  url = net::AppendQueryParameter(url, "q", query);
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  url = net::AppendQueryParameter(url, "hl", hl);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return url;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GURL GetWebstoreSearchPageUrl(const std::string& query) {
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return GURL(GetWebstoreLaunchURL() + "/search/" +
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              net::EscapeQueryParamValue(query, false));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGalleryUpdateHttpsUrl[] =
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "https://clients2.google.com/service/update2/crx";
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(battre): Delete the HTTP URL once the blacklist is downloaded via HTTPS.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExtensionBlocklistUrlPrefix[] =
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "http://www.gstatic.com/chrome/extensions/blacklist";
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExtensionBlocklistHttpsUrlPrefix[] =
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "https://www.gstatic.com/chrome/extensions/blacklist";
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetWebstoreUpdateUrl() {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine* cmdline = CommandLine::ForCurrentProcess();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (cmdline->HasSwitch(switches::kAppsGalleryUpdateURL))
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return GURL(cmdline->GetSwitchValueASCII(switches::kAppsGalleryUpdateURL));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return GetDefaultWebstoreUpdateUrl();
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)GURL GetDefaultWebstoreUpdateUrl() {
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return GURL(kGalleryUpdateHttpsUrl);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsWebstoreUpdateUrl(const GURL& update_url) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL store_url = GetWebstoreUpdateUrl();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (update_url == store_url) {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return (update_url.host() == store_url.host() &&
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            update_url.path() == store_url.path());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsBlacklistUpdateUrl(const GURL& url) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The extension blacklist URL is returned from the update service and
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // therefore not determined by Chromium. If the location of the blacklist file
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ever changes, we need to update this function. A DCHECK in the
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ExtensionUpdater ensures that we notice a change. This is the full URL
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of a blacklist:
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // http://www.gstatic.com/chrome/extensions/blacklist/l_0_0_0_7.txt
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return StartsWithASCII(url.spec(), kExtensionBlocklistUrlPrefix, true) ||
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      StartsWithASCII(url.spec(), kExtensionBlocklistHttpsUrlPrefix, true);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGalleryBrowsePrefix[] = "https://chrome.google.com/webstore";
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kWebstoreSourceField[] = "utm_source";
9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kLaunchSourceAppList[] = "chrome-app-launcher";
9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kLaunchSourceAppListSearch[] = "chrome-app-launcher-search";
9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)const char kLaunchSourceAppListInfoDialog[] = "chrome-app-launcher-info-dialog";
9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extension_urls
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extension_misc {
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kBookmarkManagerId[] = "eemcgdkfndhakfknompkggombfjjjeno";
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kChromeAppId[] = "mgndgikekgjfcpckkfioiadnlibdjbkf";
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kCloudPrintAppId[] = "mfehgcgbbipciphmccgaenjidiccnmng";
1074ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochconst char kEasyUnlockAppId[] = "mkaemigholebcgchlkbankmihknojeak";
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kEnterpriseWebStoreAppId[] = "afchcafgojfnemjkcbhfekplkmjaldaa";
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGmailAppId[] = "pjkljhegncpnkpknbcohdijeoejaedia";
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleDocAppId[] = "aohghmighlieiainnegkcijnfilokake";
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGooglePlayMusicAppId[] = "icppfcnhkcmnfdhfhphakoifcfokfdhg";
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleSearchAppId[] = "coobgpohoikkiipiblmjeljniedjpjpf";
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleSheetsAppId[] = "felcaaldnbdncclmgdcncolpebgiejap";
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGoogleSlidesAppId[] = "aapocclcgogkmnckokdopfmhonfmgoek";
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHTermAppId[] = "pnhechapfaindjhompbnflcldabbghjo";
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHTermDevAppId[] = "okddffdblfhhnmhodogpojmfkjmhinfp";
11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kIdentityApiUiAppId[] = "ahjaciijnoiaklcomgnblndopackapon";
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kCroshBuiltinAppId[] = "nkoccljplnhpfnfiajclkommnmllphnl";
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kHotwordExtensionId[] = "bepbmhgboaologfdajaanbcjmnhjmhfn";
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)const char kPdfExtensionId[] = "mhjfbmdgcfjbbpaeojofohoefgiehjai";
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kQuickOfficeComponentExtensionId[] =
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "bpmcpldpdmajfigpchkicefoigmkfalc";
123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kQuickOfficeInternalExtensionId[] =
124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    "ehibbfinohgbchlgdbfpikodjaojhccn";
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kQuickOfficeExtensionId[] = "gbkeegbaiigmenfmjfclcdgdpimamgkj";
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kSettingsAppId[] = "ennkphjdgehloodpbhlhldgbnhmacadg";
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kStreamsPrivateTestExtensionId[] =
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "oickdpebdnfbgkcaoklfcdhjniefkcji";
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kWebStoreAppId[] = "ahfgeienlihckogmohjhadlkjgocpleb";
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kYoutubeAppId[] = "blpcfgokakmgnkcojhhkbfbldkacnbeo";
13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kInAppPaymentsSupportAppId[] = "nmmhkkegccagdldgiimedpiccmgmieda";
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppLaunchHistogram[] = "Extensions.AppLaunch";
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kPlatformAppLaunchHistogram[] = "Apps.AppLaunch";
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// The extension id for the built-in component extension.
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kChromeVoxExtensionId[] =
13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    "mndnfokpggljbaajbnioimlmbfngpief";
139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst char kChromeVoxExtensionPath[] = "chromeos/chromevox";
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kChromeVoxManifestFilename[] = "manifest.json";
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kChromeVoxGuestManifestFilename[] = "manifest_guest.json";
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kBrailleImeExtensionId[] =
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    "jddehjeebkoimngcbdkaahpobgicbffp";
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kBrailleImeExtensionPath[] =
145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    "chromeos/braille_ime";
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kBrailleImeEngineId[] =
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    "_comp_ime_jddehjeebkoimngcbdkaahpobgicbffpbraille";
148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst char kConnectivityDiagnosticsPath[] =
149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    "/usr/share/chromeos-assets/connectivity_diagnostics";
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kConnectivityDiagnosticsKioskPath[] =
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    "/usr/share/chromeos-assets/connectivity_diagnostics_kiosk";
152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kConnectivityDiagnosticsLauncherPath[] =
153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    "/usr/share/chromeos-assets/connectivity_diagnostics_launcher";
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSpeechSynthesisExtensionPath[] =
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "/usr/share/chromeos-assets/speech_synthesis/patts";
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSpeechSynthesisExtensionId[] =
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "gjjabgpgjpampikjhjpfhneeoapjbjaf";
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kWallpaperManagerId[] = "obklkkbkpaoaejdabbfldmcfplpdgolj";
159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)const char kFirstRunDialogId[] = "jdgcneonijmofocbhmijhacgchbihela";
16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else
16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// The extension id for the web store extension.
16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kChromeVoxExtensionId[] =
16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    "kgejglhpjiefppelpmljglcjbhoiplfn";
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateNotInstalled[] = "not_installed";
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateInstalled[] = "installed";
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateDisabled[] = "disabled";
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateRunning[] = "running";
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateCannotRun[] = "cannot_run";
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kAppStateReadyToRun[] = "ready_to_run";
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kMediaFileSystemPathPart[] = "_";
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const uint8 kWebstoreSignaturesPublicKey[] = {
176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00,
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x8f, 0xfb, 0xbf,
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x5c, 0x37, 0x63, 0x94, 0x3c, 0xb0, 0xee, 0x01, 0xc4, 0xb5, 0xa6, 0x9a,
180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xb1, 0x9f, 0x46, 0x74, 0x6f, 0x16, 0x38, 0xa0, 0x32, 0x27, 0x35, 0xdd,
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xf0, 0x71, 0x6b, 0x0e, 0xdc, 0xf6, 0x25, 0xcb, 0xb2, 0xed, 0xea, 0xfb,
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x32, 0xd5, 0xaf, 0x1e, 0x03, 0x43, 0x03, 0x46, 0xf0, 0xa7, 0x39, 0xdb,
183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x23, 0x96, 0x1d, 0x65, 0xe5, 0x78, 0x51, 0xf0, 0x84, 0xb0, 0x0e, 0x12,
184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xac, 0x0e, 0x5b, 0xdc, 0xc9, 0xd6, 0x4c, 0x7c, 0x00, 0xd5, 0xb8, 0x1b,
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x88, 0x33, 0x3e, 0x2f, 0xda, 0xeb, 0xaa, 0xf7, 0x1a, 0x75, 0xc2, 0xae,
186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x3a, 0x54, 0xde, 0x37, 0x8f, 0x10, 0xd2, 0x28, 0xe6, 0x84, 0x79, 0x4d,
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x15, 0xb4, 0xf3, 0xbd, 0x3f, 0x56, 0xd3, 0x3c, 0x3f, 0x18, 0xab, 0xfc,
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x2e, 0x05, 0xc0, 0x1e, 0x08, 0x31, 0xb6, 0x61, 0xd0, 0xfd, 0x9f, 0x4f,
189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x3f, 0x64, 0x0d, 0x17, 0x93, 0xbc, 0xad, 0x41, 0xc7, 0x48, 0xbe, 0x00,
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x27, 0xa8, 0x4d, 0x70, 0x42, 0x92, 0x05, 0x54, 0xa6, 0x6d, 0xb8, 0xde,
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x56, 0x6e, 0x20, 0x49, 0x70, 0xee, 0x10, 0x3e, 0x6b, 0xd2, 0x7c, 0x31,
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xbd, 0x1b, 0x6e, 0xa4, 0x3c, 0x46, 0x62, 0x9f, 0x08, 0x66, 0x93, 0xf9,
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x2a, 0x51, 0x31, 0xa8, 0xdb, 0xb5, 0x9d, 0xb9, 0x0f, 0x73, 0xe8, 0xa0,
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x09, 0x32, 0x01, 0xe9, 0x7b, 0x2a, 0x8a, 0x36, 0xa0, 0xcf, 0x17, 0xb0,
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x50, 0x70, 0x9d, 0xa2, 0xf9, 0xa4, 0x6f, 0x62, 0x4d, 0xb6, 0xc9, 0x31,
196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xfc, 0xf3, 0x08, 0x12, 0xff, 0x93, 0xbd, 0x62, 0x31, 0xd8, 0x1c, 0xea,
197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x1a, 0x9e, 0xf5, 0x81, 0x28, 0x7f, 0x75, 0x5e, 0xd2, 0x27, 0x7a, 0xc2,
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x96, 0xf5, 0x9d, 0xdb, 0x18, 0xfc, 0x76, 0xdc, 0x46, 0xf0, 0x57, 0xc0,
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0x58, 0x34, 0xc8, 0x22, 0x2d, 0x2a, 0x65, 0x75, 0xa7, 0xd9, 0x08, 0x62,
200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    0xcd, 0x02, 0x03, 0x01, 0x00, 0x01};
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const int kWebstoreSignaturesPublicKeySize =
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    arraysize(kWebstoreSignaturesPublicKey);
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extension_misc
206