| // Copyright (c) 2012 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. |
| |
| #ifndef CHROME_FRAME_POLICY_SETTINGS_H_ |
| #define CHROME_FRAME_POLICY_SETTINGS_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/command_line.h" |
| #include "base/memory/singleton.h" |
| |
| // A simple class that reads and caches policy settings for Chrome Frame. |
| // TODO(tommi): Support refreshing when new settings are pushed. |
| // TODO(tommi): Use Chrome's classes for this (and the notification service). |
| class PolicySettings { |
| public: |
| enum RendererForUrl { |
| RENDERER_NOT_SPECIFIED = -1, |
| RENDER_IN_HOST, |
| RENDER_IN_CHROME_FRAME, |
| }; |
| |
| enum SkipMetadataCheck { |
| SKIP_METADATA_CHECK_NOT_SPECIFIED = -1, |
| SKIP_METADATA_CHECK_NO, |
| SKIP_METADATA_CHECK_YES, |
| }; |
| |
| static PolicySettings* GetInstance(); |
| |
| RendererForUrl default_renderer() const { |
| return default_renderer_; |
| } |
| |
| SkipMetadataCheck skip_metadata_check() const { |
| return skip_metadata_check_; |
| } |
| |
| RendererForUrl GetRendererForUrl(const wchar_t* url); |
| |
| RendererForUrl GetRendererForContentType(const wchar_t* content_type); |
| |
| // Returns the policy-configured Chrome app locale, or an empty string if none |
| // is configured. |
| const std::wstring& ApplicationLocale() const { |
| return application_locale_; |
| } |
| |
| // Contains additional parameters that can optionally be configured for the |
| // current user via the policy settings. The program part of this command |
| // line object must not be used when appending to another command line. |
| const CommandLine& AdditionalLaunchParameters() const; |
| |
| // Returns true if the Chrome Frame turndown prompt should be suppressed. |
| bool suppress_turndown_prompt() const { |
| return suppress_turndown_prompt_; |
| } |
| |
| // Helper functions for reading settings from the registry |
| static void ReadUrlSettings(RendererForUrl* default_renderer, |
| std::vector<std::wstring>* renderer_exclusion_list); |
| static void ReadMetadataCheckSettings(SkipMetadataCheck* skip_metadata_check); |
| static void ReadContentTypeSetting( |
| std::vector<std::wstring>* content_type_list); |
| static void ReadStringSetting(const char* value_name, std::wstring* value); |
| static void ReadBoolSetting(const char* value_name, bool* value); |
| |
| protected: |
| PolicySettings() |
| : default_renderer_(RENDERER_NOT_SPECIFIED), |
| skip_metadata_check_(SKIP_METADATA_CHECK_NOT_SPECIFIED), |
| additional_launch_parameters_(CommandLine::NO_PROGRAM), |
| suppress_turndown_prompt_(false) { |
| RefreshFromRegistry(); |
| } |
| |
| ~PolicySettings() { |
| } |
| |
| // Protected for now since the class is not thread safe. |
| void RefreshFromRegistry(); |
| |
| protected: |
| RendererForUrl default_renderer_; |
| SkipMetadataCheck skip_metadata_check_; |
| std::vector<std::wstring> renderer_exclusion_list_; |
| std::vector<std::wstring> content_type_list_; |
| std::wstring application_locale_; |
| CommandLine additional_launch_parameters_; |
| bool suppress_turndown_prompt_; |
| |
| private: |
| // This ensures no construction is possible outside of the class itself. |
| friend struct DefaultSingletonTraits<PolicySettings>; |
| DISALLOW_COPY_AND_ASSIGN(PolicySettings); |
| }; |
| |
| #endif // CHROME_FRAME_POLICY_SETTINGS_H_ |