// 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"
IDR_MAINFRAME_2         ICON                    "theme\google_chrome\win\chrome2.ico"
IDR_MAINFRAME_3         ICON                    "theme\google_chrome\win\chrome3.ico"
IDR_MAINFRAME_4         ICON                    "theme\google_chrome\win\chrome4.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.cc 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"
#else
IDR_X001_APP_LIST       ICON                    "theme\\chromium\\win\\app_list.ico"
#endif

IDR_X003_INSTALL_APP    ICON                    "theme\\win\\install_app.ico"


/////////////////////////////////////////////////////////////////////////////
//
// 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
/////////////////////////////////////////////////////////////////////////////
