( win, experimentId, opt_on, opt_transientExperiment )
| 75 | * @return {boolean} New state for experimentId. |
| 76 | */ |
| 77 | export function toggleExperiment( |
| 78 | win, |
| 79 | experimentId, |
| 80 | opt_on, |
| 81 | opt_transientExperiment |
| 82 | ) { |
| 83 | const currentlyOn = isExperimentOn(win, /*OK*/ experimentId); |
| 84 | const on = opt_on ?? !currentlyOn; |
| 85 | if (on != currentlyOn) { |
| 86 | const toggles = experimentToggles(win); |
| 87 | toggles[experimentId] = on; |
| 88 | |
| 89 | if (!opt_transientExperiment) { |
| 90 | const storedToggles = getExperimentToggles(win); |
| 91 | storedToggles[experimentId] = on; |
| 92 | saveExperimentToggles(win, storedToggles); |
| 93 | // Avoid affecting tests that spy/stub warn(). |
| 94 | if (!getMode().test) { |
| 95 | user().warn( |
| 96 | TAG, |
| 97 | '"%s" experiment %s for the domain "%s". See: https://amp.dev/documentation/guides-and-tutorials/learn/experimental', |
| 98 | experimentId, |
| 99 | on ? 'enabled' : 'disabled', |
| 100 | win.location.hostname |
| 101 | ); |
| 102 | } |
| 103 | } |
| 104 | } |
| 105 | return on; |
| 106 | } |
| 107 | |
| 108 | /** |
| 109 | * Calculate whether the experiment is on or off based off of its default value, |
no test coverage detected