Hard coded Extension IDs in Chrome source code

Recently i read about silent installation feature in chrome browser. So i decided to grep the source code for the extension IDs that are hardcoded and i tried to understand why they are included in the product. Over a period of time i got a chance to collect bit of information about its usage. So i decided to log it here.

I used Google CodeSearch to learn more about the chrome source code. Unfortunately Google is going to close this service from this 15th Jan 2012. If you do a search for “\”[a-p]{32}\”” in Google CodeSearch then you will get list of extension IDs that are hardcoded in the source code and in the test cases. I have spent some time to go through this long list and filtered out the Extension IDs that are hardcoded in the test cases.

Full List of Extension IDs:
    “haiffjcadagjlijoggckpgfnoeiflnem”                   // Citrix Receiver
    “gnedhmakppccajfpfiihfcdlnpgomkcf”              // Unknown
    “fjcibdnjlbfnbfdjneajpipnlcppleek”                   // Unknown
    “okddffdblfhhnmhodogpojmfkjmhinfp”            // SSH Client
    “oflbaaikkabfdfkimeclgkackhdkpnip”               // Testing extension.
    “acadkphlmlegjaadjagenfimbpphcgnh”           // PDF Viewer Plugin
    “gighmmpiobklfepjocnamgkkbiglidom”           // AdBlock plugin
    “cfhdojbkjhnklbpkdaibdccddilifddb”               // AdBlock Plus plugin
    “mcbkbpnkkkipelfledbfocopglifcfmi”               // Poppit
    “aciahcmjmecflokailenpkdchphgkefd”            // Entanglement
    “begfmnajjkbjdgmffnjaojchoncnmngg”           // Testing App
    “bmfoocgfinpmkmlbjhcbofejhkhlbchk”           // Testing App
    “mpneghmdnmaolkljkipbhaienajcflfe”            // Testing App
    “jgoepmocgafhnchmokaimcmlojpnlkhp”        // +1 Extension
    “cpembckmhnjipbgbnfiocbgnkpjdokdd”         // +1 Extension – dev
    “boemmnepglcoinjcdlfcpcbmhiecichi”           // Notifications
    “flibmgiapaohcbondaoopaalfejliklp”             // Notifications – dev
    “dlppkpafhbajpcmmoheippocdidnckmm”     // Remaining are placeholders
    “hmglfmpefabcafaimbpldpambdfomanl”      // Unknown
    “idfijlieiecpfcjckpkliefekpokhhnd”                 // Unknown
    “jaokjbijaokooelpahnlmbciccldmfla”           // Unknown
    “kdjeommiakphmeionoojjljlecmpaldd”       // Unknown
    “lpdeojkfhenboeibhkjhiancceeboknd”         // Unknown
    “hhaomjibdihmijegdhdafkllkbggdgoj”         // file_manager component extension (testing)
    “blpcfgokakmgnkcojhhkbfbldkacnbeo”       // Youtube
    “coobgpohoikkiipiblmjeljniedjpjpf”            // Google Search
    “pjkljhegncpnkpknbcohdijeoejaedia”         // Gmail
    “hkacjpbfdknhflllbcmjibkdeoafencn”         // Classic Theme
    “nckgahadagoaajjgafhacjanaoiihapd”       // Google Talk
    “ljclpkphhpbpinifbeabbhlfddcpfdde”         // Unknown
    “ppleadejekpmccmnpjdimmlfljlkdfej”        // Unknown
    “eggnbpckecmjlblplehfpjjdhhidfdoj”          // Unknown
    “kgejglhpjiefppelpmljglcjbhoiplfn”             // ChromeVox
    “eemcgdkfndhakfknompkggombfjjjeno”     // Unknown
    “ahfgeienlihckogmohjhadlkjgocpleb”        // Unknown
    “mfehgcgbbipciphmccgaenjidiccnmng”     // Unknown
    “emkhcgigkicgidendmffimilfehocheg”        // Unknown

Regarding Chrome Promotional App:
    User/Chrome can force the protomotional App view using command line switch “force-apps-promo-visible”
    Disable the protomotional app if the policy has ntp.hide_webstore_promo set to True
    Disable the protomotion app if the use manually installed/uninstalled an app.
    Chrome shows the promotion app for only ten times. If it crosses that limit and if the user has installed an app then it will not show the promotion.

Regarding Blacklisting of Extensions of Google Chrome:
    Chrome checks this URL for the blacklisted extension IDs http://www.gstatic.com/chrome/extensions/blacklist/l_0_0_0_7.txt

    bool IsBlacklistUpdateUrl(const GURL& url) {
      // The extension blacklist URL is returned from the update service and
      // therefore not determined by Chromium. If the location of the blacklist file
      // ever changes, we need to update this function. A DCHECK in the
      // ExtensionUpdater ensures that we notice a change. This is the full URL
      // of a blacklist:
      //
http://www.gstatic.com/chrome/extensions/blacklist/l_0_0_0_7.txt
      return StartsWithASCII(url.spec(), kExtensionBlocklistUrlPrefix, true) ||
          StartsWithASCII(url.spec(), kExtensionBlocklistHttpsUrlPrefix, true);
    }

More Details:

chrome/browser/chromeos/web_socket_proxy_controller.cc
    “haiffjcadagjlijoggckpgfnoeiflnem”     // Citrix Receiver
    “gnedhmakppccajfpfiihfcdlnpgomkcf”     // Unknown
    “fjcibdnjlbfnbfdjneajpipnlcppleek”     // Unknown
    “okddffdblfhhnmhodogpojmfkjmhinfp”     // SSH Client
   
    const char* kAllowedIds[] = {
        “haiffjcadagjlijoggckpgfnoeiflnem”,
        “gnedhmakppccajfpfiihfcdlnpgomkcf”,
        “fjcibdnjlbfnbfdjneajpipnlcppleek”,
        “okddffdblfhhnmhodogpojmfkjmhinfp”
    };
   
Set of extension IDs that can use WebSocketProxy private APIs from chrome app.
==============================================================================

chrome/renderer/extensions/schema_generated_bindings.cc
    “haiffjcadagjlijoggckpgfnoeiflnem”  // Citrix Receiver
    “gnedhmakppccajfpfiihfcdlnpgomkcf”, // Unknown
    “fjcibdnjlbfnbfdjneajpipnlcppleek”, // Unknown
    “oflbaaikkabfdfkimeclgkackhdkpnip”  // Testing extension.

    // Decodes supplied JPEG byte array to image pixel array.
    static v8::Handle<v8::Value> DecodeJPEG(const v8::Arguments& args) {
        static const char* kAllowedIds[] = {
            “haiffjcadagjlijoggckpgfnoeiflnem”,
            “gnedhmakppccajfpfiihfcdlnpgomkcf”,
            “fjcibdnjlbfnbfdjneajpipnlcppleek”,
            “oflbaaikkabfdfkimeclgkackhdkpnip”  // Testing extension.
        };

Set of extensions that can use DecodeJPEG private APIs from chrome app.
==============================================================================

chrome/renderer/chrome_content_renderer_client.cc
    “okddffdblfhhnmhodogpojmfkjmhinfp”  // SSH Client

    const char* kPredefinedAllowedSocketOrigins[] = {
        “okddffdblfhhnmhodogpojmfkjmhinfp”  // SSH Client
    };

    class ChromeContentRendererClient : public content::ContentRendererClient {
        …
        private:
            …..
            // Set of origins that can use TCP/UDP private APIs from NaCl.
            std::set<std::string> allowed_socket_origins_;
    };

Set of extension IDs that can use TCP/UDP private APIs through NaCl.
==============================================================================

chrome/renderer/chrome_content_renderer_client.cc
    “acadkphlmlegjaadjagenfimbpphcgnh”  // PDF Viewer Plugin
    “gighmmpiobklfepjocnamgkkbiglidom”  // AdBlock plugin
    “cfhdojbkjhnklbpkdaibdccddilifddb”  // AdBlock Plus plugin

Other whitelisted extensions.
==============================================================================

chrome/browser/extensions/apps_promo.cc
    “mcbkbpnkkkipelfledbfocopglifcfmi” // Poppit
    “aciahcmjmecflokailenpkdchphgkefd” // Entanglement

Set of promotional extensions.

    chromium/src/chrome/browser/extensions/apps_promo.cc
    bool AppsPromo::ShouldShowPromo(const ExtensionIdSet& installed_ids,bool* just_expired) {
      *just_expired = false;

      if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kForceAppsPromoVisible)) {
        return true;
      }

      // Don’t show the promo if the policy says not to.
      if (prefs_->GetBoolean(prefs::kNTPHideWebStorePromo)) {
        ExpireDefaultApps();
        return false;
      }

      // Don’t show the promo if one wasn’t served to this locale.
      if (!IsPromoSupportedForLocale())
        return false;

      int promo_counter = GetPromoCounter();
      if (GetDefaultAppsInstalled() && promo_counter <= kDefaultAppsCounterMax) {
        // If the default apps were installed from a previous Chrome version, we
        // should still show the promo. If we don’t have the exact set of default
        // apps, this means that the user manually installed or uninstalled one.
        // We no longer keep track of the default apps once others have been
        // installed, so expire them immediately.
        if (old_default_app_ids_ != installed_ids) {
          ExpireDefaultApps();
          return false;
        }

        if (promo_counter == kDefaultAppsCounterMax) {
          *just_expired = true;

          // The default apps have expired due to inaction, so ping PROMO_EXPIRE.
          UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram,
                                    extension_misc::PROMO_EXPIRE,
                                    extension_misc::PROMO_BUCKET_BOUNDARY);

          ExpireDefaultApps();
        } else {
          SetPromoCounter(++promo_counter);
        }
        return true;
      } else if (installed_ids.empty()) {
        return true;
      }
      return false;
    }
==============================================================================

chrome/browser/extensions/extension_webstore_private_api.cc
    “begfmnajjkbjdgmffnjaojchoncnmngg”  // Testing App
    “bmfoocgfinpmkmlbjhcbofejhkhlbchk”  // Testing App
    “mpneghmdnmaolkljkipbhaienajcflfe”  // Testing App
    “jgoepmocgafhnchmokaimcmlojpnlkhp”  // +1 Extension
    “cpembckmhnjipbgbnfiocbgnkpjdokdd”  // +1 Extension – dev
    “boemmnepglcoinjcdlfcpcbmhiecichi”  // Notifications
    “flibmgiapaohcbondaoopaalfejliklp”  // Notifications – dev
    “dlppkpafhbajpcmmoheippocdidnckmm”  // Remaining are placeholders
    “hmglfmpefabcafaimbpldpambdfomanl”  // Unknown
    “idfijlieiecpfcjckpkliefekpokhhnd”  // Unknown
    “jaokjbijaokooelpahnlmbciccldmfla”  // Unknown
    “kdjeommiakphmeionoojjljlecmpaldd”  // Unknown
    “lpdeojkfhenboeibhkjhiancceeboknd”  // Unknown

Set of extensions that can be silently installed.
==============================================================================

chrome/browser/extensions/file_manager_util.cc:
    “hhaomjibdihmijegdhdafkllkbggdgoj”  // file_manager component extension (testing)

File browser extension.
==============================================================================

chrome/browser/resources/default_apps/external_extensions.json
    “blpcfgokakmgnkcojhhkbfbldkacnbeo”  // Youtube
    “coobgpohoikkiipiblmjeljniedjpjpf”  // Google Search
    “pjkljhegncpnkpknbcohdijeoejaedia”  // Gmail
   
Set of extensions that is installed by default. This is updated only during the installation/update.
    C:\Users\YOUR_USERNAME_HERE\AppData\Local\Google\Chrome\Application\ENTER_GOOGLE_VERSION_HERE\default_apps\external_extensions.json
==============================================================================

chrome/browser/themes/theme_service.cc
    “hkacjpbfdknhflllbcmjibkdeoafencn”  // Classic Theme

Default theme extension ID.
==============================================================================

chromium/src/chrome/common/extensions/extension.cc
    “nckgahadagoaajjgafhacjanaoiihapd”  // Google Talk
   
No warning shown for this extension installation.

    // static
    bool Extension::IsTrustedId(const std::string& id) {
      // See
http://b/4946060 for more details.
      return id == std::string(“nckgahadagoaajjgafhacjanaoiihapd”);
    }
==============================================================================

chrome/browser/ui/panels/panel_manager.cc
    “nckgahadagoaajjgafhacjanaoiihapd”  // Google Talk
    “ljclpkphhpbpinifbeabbhlfddcpfdde”  // Unknown
    “ppleadejekpmccmnpjdimmlfljlkdfej”  // Unknown
    “eggnbpckecmjlblplehfpjjdhhidfdoj”  // Unknown

Set of extensions that can use panel features.
==================================================================================

chrome/common/extensions/extension.cc
    “kgejglhpjiefppelpmljglcjbhoiplfn”  // ChromeVox

Extension that can script all webui pages.
==================================================================================

chrome/common/extensions/extension_constants.cc
    “eemcgdkfndhakfknompkggombfjjjeno”  // Unknown
    “ahfgeienlihckogmohjhadlkjgocpleb”  // Unknown
    “mfehgcgbbipciphmccgaenjidiccnmng”  // Unknown

Other misc extensions. Bookmark manager, webstore app, cloud print app.
==================================================================================

chromium/src/chrome/browser/component_updater/pnacl/pnacl_component_installer.cc
    “emkhcgigkicgidendmffimilfehocheg”  // Unknown
==================================================================================

Advertisements
This entry was posted in browser, Chrome and tagged , , . Bookmark the permalink.

One Response to Hard coded Extension IDs in Chrome source code

  1. Linda says:

    A few more Google extensions for the list:
    “pjldcfjmnllhmgjclecdnfampinooman” // Kaspersky Anti-Banner
    “dchlnpcodkpfdpacogkljefecpegganj” // Kaspersky URL-r
    “jagncdcchgajhfhijbbhecadmaiegcmh” // Kaspersky Virtuel-Keyboard

    Just if someone were wondering what they were, but you can also download / install CCleaner, go to Start-up and the fan Google Chrome, and see what apps / extensions that are on the computer, what they belong to, and if they are activated or not.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s