Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Unified Diff: chrome/installer/setup/setup_main.cc

Issue 10837222: Enable EULA dialog to be shown from metro Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Bit o' spit n' polish. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/installer/setup/setup_main.cc
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index c101bb5f6c9b8a211c41538a8b3149921406e498..d5073cd56eb5f1cfc1eed59714f2142b1451a68a 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -21,10 +21,12 @@
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "base/win/registry.h"
+#include "base/win/scoped_comptr.h"
#include "base/win/scoped_handle.h"
#include "base/win/win_util.h"
#include "base/win/windows_version.h"
#include "breakpad/src/client/windows/handler/exception_handler.h"
+#include "chrome/common/chrome_paths.h"
grt (UTC plus 2) 2012/09/20 15:58:31 why?
robertshield 2012/09/21 01:24:43 Done.
#include "chrome/common/chrome_switches.h"
#include "chrome/installer/setup/chrome_frame_quick_enable.h"
#include "chrome/installer/setup/chrome_frame_ready_mode.h"
@@ -1031,6 +1033,65 @@ installer::InstallStatus ShowEULADialog(const string16& inner_frame) {
return installer::EULA_ACCEPTED;
}
+// Populates |path| with the path to |file| in the sentinel directory. This is
+// the application directory for user-level installs, and the default user data
+// dir for system-level installs. Returns false on error.
+bool GetSentinelFilePath(const char* file,
grt (UTC plus 2) 2012/09/20 15:58:31 please move this into installer_util so that it ca
robertshield 2012/09/21 01:24:43 The reason I didn't is that the implementations ar
grt (UTC plus 2) 2012/09/21 01:35:41 Ah, I see. Sigh. I guess this is okay, although
+ BrowserDistribution* dist,
+ FilePath* path) {
+ FilePath exe_path;
+ if (!PathService::Get(base::DIR_EXE, &exe_path))
+ return false;
+
+ if (InstallUtil::IsPerUserInstall(exe_path.value().c_str())) {
+ *path = exe_path;
+ } else {
+ std::vector<FilePath> user_data_dir_paths;
+ installer::GetChromeUserDataPaths(dist, &user_data_dir_paths);
+
+ if (!user_data_dir_paths.empty())
+ *path = user_data_dir_paths[0];
+ else
+ return false;
+ }
+
+ *path = path->AppendASCII(file);
+ return true;
+}
+
+// Creates the sentinel indicating that the EULA was required and has been
+// accepted.
+bool CreateEULASentinel(BrowserDistribution* dist) {
+ FilePath eula_sentinel;
+ if (!GetSentinelFilePath(installer::kEULASentinelFile, dist, &eula_sentinel))
+ return false;
+ return file_util::WriteFile(eula_sentinel, "", 0) != -1;
+}
+
+void ActivateMetroChrome() {
+ // Check to see if we're per-user or not. Need to do this since we may
+ // not have been invoked with --system-level even for a machine install.
+ wchar_t exe_path[MAX_PATH * 2] = {0};
grt (UTC plus 2) 2012/09/20 15:58:31 nit: {0} -> {}
robertshield 2012/09/21 01:24:43 Done.
+ GetModuleFileName(NULL, exe_path, arraysize(exe_path));
+ bool is_per_user_install = InstallUtil::IsPerUserInstall(exe_path);
+
+ string16 app_model_id =
+ ShellUtil::GetBrowserModelId(BrowserDistribution::GetDistribution(),
+ is_per_user_install);
+
+ base::win::ScopedComPtr<IApplicationActivationManager> activator;
+ HRESULT hr = activator.CreateInstance(CLSID_ApplicationActivationManager);
+ if (SUCCEEDED(hr)) {
+ DWORD pid = 0;
+ hr = activator->ActivateApplication(
+ app_model_id.c_str(), L"", AO_NONE, &pid);
grt (UTC plus 2) 2012/09/20 15:58:31 note that the version of this in process_singleton
robertshield 2012/09/21 01:24:43 Done.
+ }
+
+ if (FAILED(hr)) {
+ VLOG(1) << "Tried and failed to launch Metro Chrome.";
grt (UTC plus 2) 2012/09/20 15:58:31 replace 1090 - 1092 with: LOG_IF(ERROR, FAILED(hr)
robertshield 2012/09/21 01:24:43 Done.
+ }
+}
+
// This method processes any command line options that make setup.exe do
// various tasks other than installation (renaming chrome.exe, showing eula
// among others). This function returns true if any such command line option
@@ -1090,9 +1151,16 @@ bool HandleNonInstallCmdLineOptions(const InstallationState& original_state,
string16 inner_frame =
cmd_line.GetSwitchValueNative(installer::switches::kShowEula);
*exit_code = ShowEULADialog(inner_frame);
+
if (installer::EULA_REJECTED != *exit_code) {
grt (UTC plus 2) 2012/09/20 15:58:31 the user is left on the desktop upon rejection? d
robertshield 2012/09/21 01:24:43 Hrm.. good question, I don't know. They were not n
grt (UTC plus 2) 2012/09/21 01:35:41 da
- GoogleUpdateSettings::SetEULAConsent(
- original_state, BrowserDistribution::GetDistribution(), true);
+ if (GoogleUpdateSettings::SetEULAConsent(
+ original_state, BrowserDistribution::GetDistribution(), true)) {
+ CreateEULASentinel(BrowserDistribution::GetDistribution());
+ }
+ // For a metro-originated launch, we now need to launch back into metro.
+ if (cmd_line.HasSwitch(installer::switches::kShowEulaForMetro)) {
grt (UTC plus 2) 2012/09/20 15:58:31 nit: no braces
robertshield 2012/09/21 01:24:43 Done.
+ ActivateMetroChrome();
+ }
}
} else if (cmd_line.HasSwitch(
installer::switches::kConfigureUserSettings)) {

Powered by Google App Engine
This is Rietveld 408576698