Home | History | Annotate | Download | only in prefs
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_PREFS_COMMAND_LINE_PREF_STORE_H_
      6 #define CHROME_BROWSER_PREFS_COMMAND_LINE_PREF_STORE_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/command_line.h"
     10 #include "base/prefs/value_map_pref_store.h"
     11 #include "base/values.h"
     12 
     13 // This PrefStore keeps track of preferences set by command-line switches,
     14 // such as proxy settings.
     15 class CommandLinePrefStore : public ValueMapPrefStore {
     16  public:
     17   explicit CommandLinePrefStore(const base::CommandLine* command_line);
     18 
     19  protected:
     20   virtual ~CommandLinePrefStore();
     21 
     22   // Logs a message and returns false if the proxy switches are
     23   // self-contradictory. Protected so it can be used in unit testing.
     24   bool ValidateProxySwitches();
     25 
     26  private:
     27   friend class TestCommandLinePrefStore;
     28 
     29   struct StringSwitchToPreferenceMapEntry {
     30     const char* switch_name;
     31     const char* preference_path;
     32   };
     33 
     34   struct PathSwitchToPreferenceMapEntry {
     35     const char* switch_name;
     36     const char* preference_path;
     37   };
     38 
     39   struct IntegerSwitchToPreferenceMapEntry {
     40     const char* switch_name;
     41     const char* preference_path;
     42   };
     43 
     44   // |set_value| indicates what the preference should be set to if the switch
     45   // is present.
     46   struct BooleanSwitchToPreferenceMapEntry {
     47     const char* switch_name;
     48     const char* preference_path;
     49     bool set_value;
     50   };
     51 
     52   // Using the string and boolean maps, apply command-line switches to their
     53   // corresponding preferences in this pref store.
     54   void ApplySimpleSwitches();
     55 
     56   // Determines the proxy mode preference from the given proxy switches.
     57   void ApplyProxyMode();
     58 
     59   // Apply the SSL/TLS preferences from the given switches.
     60   void ApplySSLSwitches();
     61 
     62   // Determines whether the background mode is force-disabled.
     63   void ApplyBackgroundModeSwitches();
     64 
     65   // Weak reference.
     66   const base::CommandLine* command_line_;
     67 
     68   // Mappings of command line switches to prefs.
     69   static const BooleanSwitchToPreferenceMapEntry boolean_switch_map_[];
     70   static const StringSwitchToPreferenceMapEntry string_switch_map_[];
     71   static const PathSwitchToPreferenceMapEntry path_switch_map_[];
     72   static const IntegerSwitchToPreferenceMapEntry integer_switch_map_[];
     73 
     74   DISALLOW_COPY_AND_ASSIGN(CommandLinePrefStore);
     75 };
     76 
     77 #endif  // CHROME_BROWSER_PREFS_COMMAND_LINE_PREF_STORE_H_
     78