| Index: chrome/browser/extensions/extension_preference_api.cc
|
| diff --git a/chrome/browser/extensions/extension_preference_api.cc b/chrome/browser/extensions/extension_preference_api.cc
|
| index 3dcde37bbc2eac1c9b9c6597445d6b6eb9bc668c..2759c89548af020d4cb885930c071a519ef5f7a1 100644
|
| --- a/chrome/browser/extensions/extension_preference_api.cc
|
| +++ b/chrome/browser/extensions/extension_preference_api.cc
|
| @@ -40,6 +40,7 @@ const char kScope[] = "scope";
|
| const char kLevelOfControl[] = "levelOfControl";
|
| const char kRegular[] = "regular";
|
| const char kIncognitoPersistent[] = "incognito_persistent";
|
| +const char kIncognitoSessionOnly[] = "incognito_session_only";
|
| const char kValue[] = "value";
|
|
|
| const char kOnPrefChangeFormat[] =
|
| @@ -48,6 +49,10 @@ const char kOnPrefChangeFormat[] =
|
| const char kIncognitoErrorMessage[] =
|
| "You do not have permission to access incognito preferences.";
|
|
|
| +const char kIncognitoSessionOnlyErrorMessage[] =
|
| + "You cannot set a preference with scope 'incognito_session_only' when no "
|
| + "incognito window is open.";
|
| +
|
| const char kPermissionErrorMessage[] =
|
| "You do not have permission to access the preference '%s'. "
|
| "Be sure to declare in your manifest what permissions you need.";
|
| @@ -118,6 +123,8 @@ bool StringToScope(const std::string& s, extension_prefs_scope::Scope* scope) {
|
| *scope = extension_prefs_scope::kRegular;
|
| else if (s == kIncognitoPersistent)
|
| *scope = extension_prefs_scope::kIncognitoPersistent;
|
| + else if (s == kIncognitoSessionOnly)
|
| + *scope = extension_prefs_scope::kIncognitoSessionOnly;
|
| else
|
| return false;
|
| return true;
|
| @@ -367,8 +374,8 @@ bool SetPreferenceFunction::RunImpl() {
|
| extension_prefs_scope::Scope scope;
|
| EXTENSION_FUNCTION_VALIDATE(StringToScope(scope_str, &scope));
|
|
|
| - // TODO(battre): add kIncognitoSessionOnly
|
| - bool incognito = (scope == extension_prefs_scope::kIncognitoPersistent);
|
| + bool incognito = (scope == extension_prefs_scope::kIncognitoPersistent ||
|
| + scope == extension_prefs_scope::kIncognitoSessionOnly);
|
| if (incognito) {
|
| // Regular profiles can't access incognito unless include_incognito is true.
|
| if (!profile()->IsOffTheRecord() && !include_incognito()) {
|
| @@ -384,6 +391,12 @@ bool SetPreferenceFunction::RunImpl() {
|
| }
|
| }
|
|
|
| + if (scope == extension_prefs_scope::kIncognitoSessionOnly &&
|
| + !profile_->HasOffTheRecordProfile()) {
|
| + error_ = kIncognitoSessionOnlyErrorMessage;
|
| + return false;
|
| + }
|
| +
|
| std::string browser_pref;
|
| std::string permission;
|
| EXTENSION_FUNCTION_VALIDATE(
|
| @@ -431,8 +444,8 @@ bool ClearPreferenceFunction::RunImpl() {
|
| extension_prefs_scope::Scope scope;
|
| EXTENSION_FUNCTION_VALIDATE(StringToScope(scope_str, &scope));
|
|
|
| - // TODO(battre): add kIncognitoSessionOnly
|
| - bool incognito = (scope == extension_prefs_scope::kIncognitoPersistent);
|
| + bool incognito = (scope == extension_prefs_scope::kIncognitoPersistent ||
|
| + scope == extension_prefs_scope::kIncognitoSessionOnly);
|
| if (incognito) {
|
| // We don't check incognito permissions here, as an extension should be
|
| // always allowed to clear its own settings.
|
|
|