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