// Microsoft Visual C++ generated resource script.
//
#include "chrome_exe_resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32


/////////////////////////////////////////////////////////////////////////////
//
// Icon
//

// The application icon should: have the lowest ID, be placed first, and its
// resource name should be alphabetically less than the name of any other icon
// resource (http://msdn.microsoft.com/en-us/library/ms997538.aspx).
// Note: chrome/installer/util/shell_util.cc depends on the order and number of
// icons.  To avoid breaking existing shortcuts, add new icons at the end
// (following the ordering described above).
#if defined(GOOGLE_CHROME_BUILD)
IDR_MAINFRAME           ICON       "theme\\google_chrome\\win\\chrome.ico"
// These three are no longer used, but remain as placeholders. (They cannot be
// removed, or existing shortcuts to the later resources will break.)
IDR_MAINFRAME_2         ICON       "theme\\google_chrome\\win\\placeholder.ico"
IDR_MAINFRAME_3         ICON       "theme\\google_chrome\\win\\placeholder.ico"
IDR_MAINFRAME_4         ICON       "theme\\google_chrome\\win\\placeholder.ico"
// The SXS icon must have an index of 4, the constant is used in Chrome code to
// identify it.
IDR_SXS                 ICON       "theme\\google_chrome\\win\\chrome_sxs.ico"
#else
IDR_MAINFRAME           ICON       "theme\\chromium\\win\\chromium.ico"
#endif

// Start a naming scheme to keep icons in order. A leading X is used to keep
// the name alphabetically after IDR_SXS. The maximum of the number that follows
// should be incremented when a new icon is added. The icon indices in
// chrome_icon_resources_win.h should also be updated.

#if defined(GOOGLE_CHROME_BUILD)
IDR_X001_APP_LIST       ICON       "theme\\google_chrome\\win\\app_list.ico"
IDR_X002_APP_LIST_SXS   ICON       "theme\\google_chrome\\win\\app_list_sxs.ico"
IDR_X003_INCOGNITO      ICON       "theme\\google_chrome\\win\\incognito.ico"
IDR_X004_DEV            ICON       "theme\\google_chrome\\win\\chrome_dev.ico"
IDR_X005_BETA           ICON       "theme\\google_chrome\\win\\chrome_beta.ico"
#else
IDR_X001_APP_LIST       ICON       "theme\\chromium\\win\\app_list.ico"
IDR_X003_INCOGNITO      ICON       "theme\\chromium\\win\\incognito.ico"
#endif


/////////////////////////////////////////////////////////////////////////////
//
// GOOGLEUPDATEAPPLICATIONCOMMANDS is a "well-known" marker resource defined
// by Omaha. Executables must both be signed by Google and contain the marker
// in order to expose application commands.
//
#define IDR_GOOGLE_UPDATE_APP_COMMANDS_MARKUP 1

IDR_GOOGLE_UPDATE_APP_COMMANDS_MARKUP GOOGLEUPDATEAPPLICATIONCOMMANDS { 1L }


#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
