summaryrefslogtreecommitdiffstats
path: root/chrome_frame/policy_settings.cc
diff options
context:
space:
mode:
authortommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-15 14:41:48 +0000
committertommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-15 14:41:48 +0000
commit55604d73d488ecdbfaca303d9e4ee1ec01391301 (patch)
tree5c3ac04d1ebb4bbf8f120d30569df7a1c5ff521b /chrome_frame/policy_settings.cc
parentdb9afc2141180923600d998c46ae2afc32453495 (diff)
downloadchromium_src-55604d73d488ecdbfaca303d9e4ee1ec01391301.zip
chromium_src-55604d73d488ecdbfaca303d9e4ee1ec01391301.tar.gz
chromium_src-55604d73d488ecdbfaca303d9e4ee1ec01391301.tar.bz2
Basic policy implementation for Chrome Frame. We read the policy settings on first request and cache them.
In order to refresh the policy settings the browser has to be restarted. Future implementations may support pushing out policy changes without requiring the user to restart the browser. TEST=Use the policy templates to change the default renderer ("Configure the default renderer for Chrome Frame") and relevant exclusion lists. BUG=29349 Review URL: http://codereview.chromium.org/3435004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59496 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/policy_settings.cc')
-rw-r--r--chrome_frame/policy_settings.cc70
1 files changed, 70 insertions, 0 deletions
diff --git a/chrome_frame/policy_settings.cc b/chrome_frame/policy_settings.cc
new file mode 100644
index 0000000..f1c9984
--- /dev/null
+++ b/chrome_frame/policy_settings.cc
@@ -0,0 +1,70 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome_frame/policy_settings.h"
+
+#include "base/logging.h"
+#include "base/registry.h"
+#include "base/string_util.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/common/policy_constants.h"
+
+PolicySettings::RendererForUrl PolicySettings::GetRendererForUrl(
+ const wchar_t* url) {
+ RendererForUrl renderer = default_renderer_;
+ std::vector<std::wstring>::const_iterator it;
+ for (it = renderer_exclusion_list_.begin();
+ it != renderer_exclusion_list_.end(); ++it) {
+ if (MatchPattern(url, (*it))) {
+ renderer = (renderer == RENDER_IN_HOST) ?
+ RENDER_IN_CHROME_FRAME : RENDER_IN_HOST;
+ break;
+ }
+ }
+ return renderer;
+}
+
+void PolicySettings::RefreshFromRegistry() {
+ default_renderer_ = RENDERER_NOT_SPECIFIED;
+ renderer_exclusion_list_.clear();
+
+ RegKey config_key;
+ DWORD value = RENDERER_NOT_SPECIFIED;
+ HKEY root_key[] = { HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER };
+ std::wstring settings_value(
+ ASCIIToWide(policy::key::kChromeFrameRendererSettings));
+ for (int i = 0; i < arraysize(root_key); ++i) {
+ if (config_key.Open(root_key[i], policy::kRegistrySubKey, KEY_READ) &&
+ config_key.ReadValueDW(settings_value.c_str(), &value)) {
+ break;
+ } else {
+ config_key.Close();
+ }
+ }
+
+ DCHECK(value == RENDERER_NOT_SPECIFIED ||
+ value == RENDER_IN_HOST ||
+ value == RENDER_IN_CHROME_FRAME) <<
+ "invalid default renderer setting: " << value;
+
+ if (value != RENDER_IN_HOST && value != RENDER_IN_CHROME_FRAME) {
+ DLOG(INFO) << "default renderer not specified via policy";
+ } else {
+ default_renderer_ = static_cast<RendererForUrl>(value);
+ const char* exclusion_list_name = (default_renderer_ == RENDER_IN_HOST) ?
+ policy::key::kRenderInChromeFrameList :
+ policy::key::kRenderInHostList;
+
+ RegistryValueIterator url_list(config_key.Handle(),
+ ASCIIToWide(exclusion_list_name).c_str());
+ while (url_list.Valid()) {
+ renderer_exclusion_list_.push_back(url_list.Value());
+ ++url_list;
+ }
+ DLOG(INFO) << "Default renderer as specified via policy: " <<
+ default_renderer_ << " exclusion list size: " <<
+ renderer_exclusion_list_.size();
+ }
+}
+