Home | History | Annotate | Download | only in extensions
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/common/extensions/extension_constants.h"
      6 
      7 #include <vector>
      8 
      9 #include "base/command_line.h"
     10 #include "base/strings/string_util.h"
     11 #include "chrome/common/chrome_switches.h"
     12 #include "net/base/escape.h"
     13 #include "net/base/url_util.h"
     14 
     15 namespace extension_urls {
     16 
     17 std::string GetWebstoreLaunchURL() {
     18   std::string gallery_prefix = kGalleryBrowsePrefix;
     19   if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAppsGalleryURL))
     20     gallery_prefix = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
     21         switches::kAppsGalleryURL);
     22   if (EndsWith(gallery_prefix, "/", true))
     23     gallery_prefix = gallery_prefix.substr(0, gallery_prefix.length() - 1);
     24   return gallery_prefix;
     25 }
     26 
     27 std::string GetExtensionGalleryURL() {
     28   return GetWebstoreLaunchURL() + "/category/extensions";
     29 }
     30 
     31 std::string GetWebstoreItemDetailURLPrefix() {
     32   return GetWebstoreLaunchURL() + "/detail/";
     33 }
     34 
     35 GURL GetWebstoreItemJsonDataURL(const std::string& extension_id) {
     36   return GURL(GetWebstoreLaunchURL() + "/inlineinstall/detail/" + extension_id);
     37 }
     38 
     39 GURL GetWebstoreJsonSearchUrl(const std::string& query, const std::string& hl) {
     40   GURL url(GetWebstoreLaunchURL() + "/jsonsearch");
     41   url = net::AppendQueryParameter(url, "q", query);
     42   url = net::AppendQueryParameter(url, "hl", hl);
     43   return url;
     44 }
     45 
     46 GURL GetWebstoreSearchPageUrl(const std::string& query) {
     47   return GURL(GetWebstoreLaunchURL() + "/search/" +
     48               net::EscapeQueryParamValue(query, false));
     49 }
     50 
     51 const char kGalleryUpdateHttpsUrl[] =
     52     "https://clients2.google.com/service/update2/crx";
     53 // TODO(battre): Delete the HTTP URL once the blacklist is downloaded via HTTPS.
     54 const char kExtensionBlocklistUrlPrefix[] =
     55     "http://www.gstatic.com/chrome/extensions/blacklist";
     56 const char kExtensionBlocklistHttpsUrlPrefix[] =
     57     "https://www.gstatic.com/chrome/extensions/blacklist";
     58 
     59 GURL GetWebstoreUpdateUrl() {
     60   CommandLine* cmdline = CommandLine::ForCurrentProcess();
     61   if (cmdline->HasSwitch(switches::kAppsGalleryUpdateURL))
     62     return GURL(cmdline->GetSwitchValueASCII(switches::kAppsGalleryUpdateURL));
     63   else
     64     return GetDefaultWebstoreUpdateUrl();
     65 }
     66 
     67 GURL GetDefaultWebstoreUpdateUrl() {
     68   return GURL(kGalleryUpdateHttpsUrl);
     69 }
     70 
     71 bool IsWebstoreUpdateUrl(const GURL& update_url) {
     72   GURL store_url = GetWebstoreUpdateUrl();
     73   if (update_url == store_url) {
     74     return true;
     75   } else {
     76     return (update_url.host() == store_url.host() &&
     77             update_url.path() == store_url.path());
     78   }
     79 }
     80 
     81 bool IsBlacklistUpdateUrl(const GURL& url) {
     82   // The extension blacklist URL is returned from the update service and
     83   // therefore not determined by Chromium. If the location of the blacklist file
     84   // ever changes, we need to update this function. A DCHECK in the
     85   // ExtensionUpdater ensures that we notice a change. This is the full URL
     86   // of a blacklist:
     87   // http://www.gstatic.com/chrome/extensions/blacklist/l_0_0_0_7.txt
     88   return StartsWithASCII(url.spec(), kExtensionBlocklistUrlPrefix, true) ||
     89       StartsWithASCII(url.spec(), kExtensionBlocklistHttpsUrlPrefix, true);
     90 }
     91 
     92 const char kGalleryBrowsePrefix[] = "https://chrome.google.com/webstore";
     93 
     94 const char kWebstoreSourceField[] = "utm_source";
     95 
     96 const char kLaunchSourceAppList[] = "chrome-app-launcher";
     97 const char kLaunchSourceAppListSearch[] = "chrome-app-launcher-search";
     98 const char kLaunchSourceAppListInfoDialog[] = "chrome-app-launcher-info-dialog";
     99 
    100 }  // namespace extension_urls
    101 
    102 namespace extension_misc {
    103 
    104 const char kBookmarkManagerId[] = "eemcgdkfndhakfknompkggombfjjjeno";
    105 const char kChromeAppId[] = "mgndgikekgjfcpckkfioiadnlibdjbkf";
    106 const char kCloudPrintAppId[] = "mfehgcgbbipciphmccgaenjidiccnmng";
    107 const char kEasyUnlockAppId[] = "mkaemigholebcgchlkbankmihknojeak";
    108 const char kEnterpriseWebStoreAppId[] = "afchcafgojfnemjkcbhfekplkmjaldaa";
    109 const char kGmailAppId[] = "pjkljhegncpnkpknbcohdijeoejaedia";
    110 const char kGoogleDocAppId[] = "aohghmighlieiainnegkcijnfilokake";
    111 const char kGooglePlayMusicAppId[] = "icppfcnhkcmnfdhfhphakoifcfokfdhg";
    112 const char kGoogleSearchAppId[] = "coobgpohoikkiipiblmjeljniedjpjpf";
    113 const char kGoogleSheetsAppId[] = "felcaaldnbdncclmgdcncolpebgiejap";
    114 const char kGoogleSlidesAppId[] = "aapocclcgogkmnckokdopfmhonfmgoek";
    115 const char kHTermAppId[] = "pnhechapfaindjhompbnflcldabbghjo";
    116 const char kHTermDevAppId[] = "okddffdblfhhnmhodogpojmfkjmhinfp";
    117 const char kIdentityApiUiAppId[] = "ahjaciijnoiaklcomgnblndopackapon";
    118 const char kCroshBuiltinAppId[] = "nkoccljplnhpfnfiajclkommnmllphnl";
    119 const char kHotwordExtensionId[] = "bepbmhgboaologfdajaanbcjmnhjmhfn";
    120 const char kPdfExtensionId[] = "mhjfbmdgcfjbbpaeojofohoefgiehjai";
    121 const char kQuickOfficeComponentExtensionId[] =
    122     "bpmcpldpdmajfigpchkicefoigmkfalc";
    123 const char kQuickOfficeInternalExtensionId[] =
    124     "ehibbfinohgbchlgdbfpikodjaojhccn";
    125 const char kQuickOfficeExtensionId[] = "gbkeegbaiigmenfmjfclcdgdpimamgkj";
    126 const char kSettingsAppId[] = "ennkphjdgehloodpbhlhldgbnhmacadg";
    127 const char kStreamsPrivateTestExtensionId[] =
    128     "oickdpebdnfbgkcaoklfcdhjniefkcji";
    129 const char kWebStoreAppId[] = "ahfgeienlihckogmohjhadlkjgocpleb";
    130 const char kYoutubeAppId[] = "blpcfgokakmgnkcojhhkbfbldkacnbeo";
    131 const char kInAppPaymentsSupportAppId[] = "nmmhkkegccagdldgiimedpiccmgmieda";
    132 
    133 const char kAppLaunchHistogram[] = "Extensions.AppLaunch";
    134 const char kPlatformAppLaunchHistogram[] = "Apps.AppLaunch";
    135 #if defined(OS_CHROMEOS)
    136 // The extension id for the built-in component extension.
    137 const char kChromeVoxExtensionId[] =
    138     "mndnfokpggljbaajbnioimlmbfngpief";
    139 const char kChromeVoxExtensionPath[] = "chromeos/chromevox";
    140 const char kChromeVoxManifestFilename[] = "manifest.json";
    141 const char kChromeVoxGuestManifestFilename[] = "manifest_guest.json";
    142 const char kBrailleImeExtensionId[] =
    143     "jddehjeebkoimngcbdkaahpobgicbffp";
    144 const char kBrailleImeExtensionPath[] =
    145     "chromeos/braille_ime";
    146 const char kBrailleImeEngineId[] =
    147     "_comp_ime_jddehjeebkoimngcbdkaahpobgicbffpbraille";
    148 const char kConnectivityDiagnosticsPath[] =
    149     "/usr/share/chromeos-assets/connectivity_diagnostics";
    150 const char kConnectivityDiagnosticsKioskPath[] =
    151     "/usr/share/chromeos-assets/connectivity_diagnostics_kiosk";
    152 const char kConnectivityDiagnosticsLauncherPath[] =
    153     "/usr/share/chromeos-assets/connectivity_diagnostics_launcher";
    154 const char kSpeechSynthesisExtensionPath[] =
    155     "/usr/share/chromeos-assets/speech_synthesis/patts";
    156 const char kSpeechSynthesisExtensionId[] =
    157     "gjjabgpgjpampikjhjpfhneeoapjbjaf";
    158 const char kWallpaperManagerId[] = "obklkkbkpaoaejdabbfldmcfplpdgolj";
    159 const char kFirstRunDialogId[] = "jdgcneonijmofocbhmijhacgchbihela";
    160 #else
    161 // The extension id for the web store extension.
    162 const char kChromeVoxExtensionId[] =
    163     "kgejglhpjiefppelpmljglcjbhoiplfn";
    164 #endif
    165 
    166 const char kAppStateNotInstalled[] = "not_installed";
    167 const char kAppStateInstalled[] = "installed";
    168 const char kAppStateDisabled[] = "disabled";
    169 const char kAppStateRunning[] = "running";
    170 const char kAppStateCannotRun[] = "cannot_run";
    171 const char kAppStateReadyToRun[] = "ready_to_run";
    172 
    173 const char kMediaFileSystemPathPart[] = "_";
    174 
    175 const uint8 kWebstoreSignaturesPublicKey[] = {
    176     0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
    177     0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00,
    178     0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x8f, 0xfb, 0xbf,
    179     0x5c, 0x37, 0x63, 0x94, 0x3c, 0xb0, 0xee, 0x01, 0xc4, 0xb5, 0xa6, 0x9a,
    180     0xb1, 0x9f, 0x46, 0x74, 0x6f, 0x16, 0x38, 0xa0, 0x32, 0x27, 0x35, 0xdd,
    181     0xf0, 0x71, 0x6b, 0x0e, 0xdc, 0xf6, 0x25, 0xcb, 0xb2, 0xed, 0xea, 0xfb,
    182     0x32, 0xd5, 0xaf, 0x1e, 0x03, 0x43, 0x03, 0x46, 0xf0, 0xa7, 0x39, 0xdb,
    183     0x23, 0x96, 0x1d, 0x65, 0xe5, 0x78, 0x51, 0xf0, 0x84, 0xb0, 0x0e, 0x12,
    184     0xac, 0x0e, 0x5b, 0xdc, 0xc9, 0xd6, 0x4c, 0x7c, 0x00, 0xd5, 0xb8, 0x1b,
    185     0x88, 0x33, 0x3e, 0x2f, 0xda, 0xeb, 0xaa, 0xf7, 0x1a, 0x75, 0xc2, 0xae,
    186     0x3a, 0x54, 0xde, 0x37, 0x8f, 0x10, 0xd2, 0x28, 0xe6, 0x84, 0x79, 0x4d,
    187     0x15, 0xb4, 0xf3, 0xbd, 0x3f, 0x56, 0xd3, 0x3c, 0x3f, 0x18, 0xab, 0xfc,
    188     0x2e, 0x05, 0xc0, 0x1e, 0x08, 0x31, 0xb6, 0x61, 0xd0, 0xfd, 0x9f, 0x4f,
    189     0x3f, 0x64, 0x0d, 0x17, 0x93, 0xbc, 0xad, 0x41, 0xc7, 0x48, 0xbe, 0x00,
    190     0x27, 0xa8, 0x4d, 0x70, 0x42, 0x92, 0x05, 0x54, 0xa6, 0x6d, 0xb8, 0xde,
    191     0x56, 0x6e, 0x20, 0x49, 0x70, 0xee, 0x10, 0x3e, 0x6b, 0xd2, 0x7c, 0x31,
    192     0xbd, 0x1b, 0x6e, 0xa4, 0x3c, 0x46, 0x62, 0x9f, 0x08, 0x66, 0x93, 0xf9,
    193     0x2a, 0x51, 0x31, 0xa8, 0xdb, 0xb5, 0x9d, 0xb9, 0x0f, 0x73, 0xe8, 0xa0,
    194     0x09, 0x32, 0x01, 0xe9, 0x7b, 0x2a, 0x8a, 0x36, 0xa0, 0xcf, 0x17, 0xb0,
    195     0x50, 0x70, 0x9d, 0xa2, 0xf9, 0xa4, 0x6f, 0x62, 0x4d, 0xb6, 0xc9, 0x31,
    196     0xfc, 0xf3, 0x08, 0x12, 0xff, 0x93, 0xbd, 0x62, 0x31, 0xd8, 0x1c, 0xea,
    197     0x1a, 0x9e, 0xf5, 0x81, 0x28, 0x7f, 0x75, 0x5e, 0xd2, 0x27, 0x7a, 0xc2,
    198     0x96, 0xf5, 0x9d, 0xdb, 0x18, 0xfc, 0x76, 0xdc, 0x46, 0xf0, 0x57, 0xc0,
    199     0x58, 0x34, 0xc8, 0x22, 0x2d, 0x2a, 0x65, 0x75, 0xa7, 0xd9, 0x08, 0x62,
    200     0xcd, 0x02, 0x03, 0x01, 0x00, 0x01};
    201 
    202 const int kWebstoreSignaturesPublicKeySize =
    203     arraysize(kWebstoreSignaturesPublicKey);
    204 
    205 }  // namespace extension_misc
    206