int main(int argc, char *argv[]) { pargc = &argc; pargv = &argv; // Get current executable path char curExePath[MAXPATHLEN]; if (NS_FAILED(mozilla::BinaryPath::Get(argv[0], curExePath))) { ErrorDialog("Couldn't read current executable path"); return 255; } char curExeDir[MAXPATHLEN]; GetDirFromPath(curExeDir, curExePath); bool removeApp = false; for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "-profile")) { isProfileOverridden = true; } else if (!strcmp(argv[i], "-remove")) { removeApp = true; } } char firefoxDir[MAXPATHLEN]; // Check if Firefox is in the same directory as the webapp runtime. // This is the case for webapprt chrome and content tests. if (GRELoadAndLaunch(curExeDir, true)) { return 0; } // Set up webAppIniPath with path to webapp.ini char webAppIniPath[MAXPATHLEN]; snprintf(webAppIniPath, MAXPATHLEN, "%s/%s", curExeDir, kWEBAPP_INI); // Open webapp.ini as an INI file nsINIParser parser; if (NS_FAILED(parser.Init(webAppIniPath))) { ErrorDialog("Couldn't open webapp.ini"); return 255; } // Set up our environment to know where webapp.ini was loaded from if (setenv(kAPP_ENV_VAR, webAppIniPath, 1) == -1) { ErrorDialog("Couldn't set up app environment"); return 255; } // Get profile dir from webapp.ini if (NS_FAILED(parser.GetString("Webapp", "Profile", profile, MAXPATHLEN))) { ErrorDialog("Couldn't retrieve profile from web app INI file"); return 255; } if (removeApp) { RemoveApplication(parser, curExeDir, profile); return 0; } // Get the location of Firefox from our webapp.ini if (NS_FAILED(parser.GetString("WebappRT", "InstallDir", firefoxDir, MAXPATHLEN))) { ErrorDialog("Couldn't find your Firefox install directory."); return 255; } // Set up appIniPath with path to application.ini. // This is in the Firefox installation directory. char appIniPath[MAXPATHLEN]; snprintf(appIniPath, MAXPATHLEN, "%s/%s", firefoxDir, kAPP_INI); if (NS_FAILED(parser.Init(appIniPath))) { ErrorDialog("This app requires that Firefox version 16 or above is installed." " Firefox 16+ has not been detected."); return 255; } // Get buildid of Firefox we're trying to load (MAXPATHLEN only for convenience) char buildid[MAXPATHLEN]; if (NS_FAILED(parser.GetString("App", "BuildID", buildid, MAXPATHLEN))) { ErrorDialog("Couldn't read BuildID from Firefox application.ini"); return 255; } // If WebAppRT version == Firefox version, load XUL and execute the application if (!strcmp(buildid, NS_STRINGIFY(GRE_BUILDID))) { if (GRELoadAndLaunch(firefoxDir, false)) return 0; } // Else, copy WebAppRT from Firefox installation and re-execute the process else CopyAndRelaunch(firefoxDir, curExePath); return 255; }
int main(int argc, char *argv[]) { gtk_init(&argc, &argv); pargc = &argc; pargv = &argv; // Get current executable path char curExePath[MAXPATHLEN]; if (readlink("/proc/self/exe", curExePath, MAXPATHLEN) == -1) { ErrorDialog("Couldn't read current executable path"); return 255; } // Set up webAppIniPath with path to webapp.ini char curExeDir[MAXPATHLEN]; GetDirFromPath(curExeDir, curExePath); char webAppIniPath[MAXPATHLEN]; snprintf(webAppIniPath, MAXPATHLEN, "%s/%s", curExeDir, kWEBAPP_INI); // Open webapp.ini as an INI file nsINIParser parser; if (NS_FAILED(parser.Init(webAppIniPath))) { ErrorDialog("Couldn't open webapp.ini"); return 255; } // Set up our environment to know where webapp.ini was loaded from if (setenv(kAPP_ENV_VAR, webAppIniPath, 1) == -1) { ErrorDialog("Couldn't set up app environment"); return 255; } // Get profile dir from webapp.ini char profile[MAXPATHLEN]; if (NS_FAILED(parser.GetString("Webapp", "Profile", profile, MAXPATHLEN))) { ErrorDialog("Couldn't retrieve profile from web app INI file"); return 255; } // Get the location of Firefox from our webapp.ini char firefoxDir[MAXPATHLEN]; if (NS_FAILED(parser.GetString("WebappRT", "InstallDir", firefoxDir, MAXPATHLEN))) { ErrorDialog("Couldn't find your Firefox install directory."); return 255; } // Set up appIniPath with path to application.ini. // This is in the Firefox installation directory. char appIniPath[MAXPATHLEN]; snprintf(appIniPath, MAXPATHLEN, "%s/%s", firefoxDir, kAPP_INI); if (NS_FAILED(parser.Init(appIniPath))) { ErrorDialog("Couldn't open Firefox application.ini"); return 255; } // Get buildid of Firefox we're trying to load (MAXPATHLEN only for convenience) char buildid[MAXPATHLEN]; if (NS_FAILED(parser.GetString("App", "BuildID", buildid, MAXPATHLEN))) { ErrorDialog("Couldn't read BuildID from Firefox application.ini"); return 255; } // If WebAppRT version == Firefox version, load XUL and execute the application if (!strcmp(buildid, NS_STRINGIFY(GRE_BUILDID))) { if (GRELoadAndLaunch(firefoxDir, profile)) return 0; } // Else, copy WebAppRT from Firefox installation and re-execute the process else CopyAndRelaunch(firefoxDir, curExePath); return 255; }