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

Unified Diff: chrome/browser/policy/policy_path_parser_win.cc

Issue 12277002: Make sure ShellIntegration::CommandLineArgsForLauncher respects the UserDataDir policy. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: More documentation. Created 7 years, 10 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
« no previous file with comments | « chrome/browser/policy/policy_path_parser_mac.mm ('k') | chrome/browser/shell_integration.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/policy/policy_path_parser_win.cc
diff --git a/chrome/browser/policy/policy_path_parser_win.cc b/chrome/browser/policy/policy_path_parser_win.cc
index 3a7f7e2719c1bc339136aa8a2bd151f3d289e597..26d0e5270df2fb10a4a01ac987cf7a410741bbc4 100644
--- a/chrome/browser/policy/policy_path_parser_win.cc
+++ b/chrome/browser/policy/policy_path_parser_win.cc
@@ -8,11 +8,32 @@
#include "chrome/browser/policy/policy_path_parser.h"
+#include "base/command_line.h"
#include "base/memory/scoped_ptr.h"
+#include "base/utf_string_conversions.h"
+#include "base/win/registry.h"
+#include "chrome/common/chrome_switches.h"
+#include "policy/policy_constants.h"
-namespace policy {
+namespace {
-namespace path_parser {
+// Checks if the registry key exists in the given hive and expands any
+// variables in the string.
+bool LoadUserDataDirPolicyFromRegistry(HKEY hive,
+ const std::wstring& key_name,
+ base::FilePath* user_data_dir) {
+ std::wstring value;
+
+ base::win::RegKey policy_key(hive,
+ policy::kRegistryMandatorySubKey,
+ KEY_READ);
+ if (policy_key.ReadValue(key_name.c_str(), &value) == ERROR_SUCCESS) {
+ *user_data_dir =
+ base::FilePath(policy::path_parser::ExpandPathVariables(value));
+ return true;
+ }
+ return false;
+}
const WCHAR* kMachineNamePolicyVarName = L"${machine_name}";
const WCHAR* kUserNamePolicyVarName = L"${user_name}";
@@ -41,6 +62,12 @@ const WinFolderNamesToCSIDLMapping win_folder_mapping[] = {
{ kWinDocumentsFolderVarName, CSIDL_PERSONAL}
};
+} // namespace
+
+namespace policy {
+
+namespace path_parser {
+
// Replaces all variable occurances in the policy string with the respective
// system settings values.
base::FilePath::StringType ExpandPathVariables(
@@ -106,6 +133,39 @@ base::FilePath::StringType ExpandPathVariables(
return result;
}
+void CheckUserDataDirPolicy(base::FilePath* user_data_dir) {
+ DCHECK(user_data_dir);
+ // We are running as Chrome Frame if we were invoked with user-data-dir,
+ // chrome-frame, and automation-channel switches.
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ const bool is_chrome_frame =
+ !user_data_dir->empty() &&
+ command_line->HasSwitch(switches::kChromeFrame) &&
+ command_line->HasSwitch(switches::kAutomationClientChannelID);
+
+ // In the case of Chrome Frame, the last path component of the user-data-dir
+ // provided on the command line must be preserved since it is specific to
+ // CF's host.
+ base::FilePath cf_host_dir;
+ if (is_chrome_frame)
+ cf_host_dir = user_data_dir->BaseName();
+
+ // Policy from the HKLM hive has precedence over HKCU so if we have one here
+ // we don't have to try to load HKCU.
+ const char* key_name_ascii = (is_chrome_frame ? policy::key::kGCFUserDataDir :
+ policy::key::kUserDataDir);
+ std::wstring key_name(ASCIIToWide(key_name_ascii));
+ if (LoadUserDataDirPolicyFromRegistry(HKEY_LOCAL_MACHINE, key_name,
+ user_data_dir) ||
+ LoadUserDataDirPolicyFromRegistry(HKEY_CURRENT_USER, key_name,
+ user_data_dir)) {
+ // A Group Policy value was loaded. Append the Chrome Frame host directory
+ // if relevant.
+ if (is_chrome_frame)
+ *user_data_dir = user_data_dir->Append(cf_host_dir);
+ }
+}
+
} // namespace path_parser
} // namespace policy
« no previous file with comments | « chrome/browser/policy/policy_path_parser_mac.mm ('k') | chrome/browser/shell_integration.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698