15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_COMMON_EXTENSIONS_FEATURE_SWITCH_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_COMMON_EXTENSIONS_FEATURE_SWITCH_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandLine;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A switch that can turn a feature on or off. Typically controlled via
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// command-line switches but can be overridden, e.g., for testing.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FeatureSwitch {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static FeatureSwitch* easy_off_store_install();
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static FeatureSwitch* script_badges();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static FeatureSwitch* script_bubble();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static FeatureSwitch* prompt_for_external_extensions();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static FeatureSwitch* tab_capture();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum DefaultValue {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DEFAULT_ENABLED,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DEFAULT_DISABLED
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum OverrideValue {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OVERRIDE_NONE,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OVERRIDE_ENABLED,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OVERRIDE_DISABLED
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A temporary override for the switch value.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class ScopedOverride {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScopedOverride(FeatureSwitch* feature, bool override_value);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~ScopedOverride();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FeatureSwitch* feature_;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FeatureSwitch::OverrideValue previous_value_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISALLOW_COPY_AND_ASSIGN(ScopedOverride);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureSwitch(const char* switch_name,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                DefaultValue default_value);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureSwitch(const CommandLine* command_line,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const char* switch_name,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                DefaultValue default_value);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Consider using ScopedOverride instead.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetOverrideValue(OverrideValue value);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OverrideValue GetOverrideValue() const;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsEnabled() const;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetLegacyEnableFlag() const;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetLegacyDisableFlag() const;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(const CommandLine* command_line,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            const char* switch_name,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            DefaultValue default_value);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const CommandLine* command_line_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* switch_name_;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool default_value_;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OverrideValue override_value_;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FeatureSwitch);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_COMMON_EXTENSIONS_FEATURE_SWITCH_H_
79