1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/common/manifest_handlers/incognito_info.h"
#include <memory>
#include "extensions/common/extension.h"
namespace extensions {
using IncognitoManifestKeys = api::incognito::ManifestKeys;
IncognitoInfo::IncognitoInfo(api::incognito::IncognitoMode mode) : mode(mode) {
DCHECK_NE(api::incognito::IncognitoMode::kNone, mode);
}
IncognitoInfo::~IncognitoInfo() = default;
// static
bool IncognitoInfo::IsSpanningMode(const Extension* extension) {
IncognitoInfo* info = static_cast<IncognitoInfo*>(
extension->GetManifestData(IncognitoManifestKeys::kIncognito));
return info->mode == api::incognito::IncognitoMode::kSpanning;
}
// static
bool IncognitoInfo::IsSplitMode(const Extension* extension) {
IncognitoInfo* info = static_cast<IncognitoInfo*>(
extension->GetManifestData(IncognitoManifestKeys::kIncognito));
return info->mode == api::incognito::IncognitoMode::kSplit;
}
// static
bool IncognitoInfo::IsIncognitoAllowed(const Extension* extension) {
IncognitoInfo* info = static_cast<IncognitoInfo*>(
extension->GetManifestData(IncognitoManifestKeys::kIncognito));
return info->mode != api::incognito::IncognitoMode::kNotAllowed;
}
IncognitoHandler::IncognitoHandler() = default;
IncognitoHandler::~IncognitoHandler() = default;
bool IncognitoHandler::Parse(Extension* extension, std::u16string* error) {
IncognitoManifestKeys manifest_keys;
if (!IncognitoManifestKeys::ParseFromDictionary(
extension->manifest()->available_values(), manifest_keys, *error)) {
return false;
}
api::incognito::IncognitoMode mode = manifest_keys.incognito;
// This will be the case if the manifest key was omitted.
if (mode == api::incognito::IncognitoMode::kNone) {
// Extensions and Chrome apps default to spanning mode. Hosted and legacy
// packaged apps default to split mode.
mode = extension->is_hosted_app() || extension->is_legacy_packaged_app()
? api::incognito::IncognitoMode::kSplit
: api::incognito::IncognitoMode::kSpanning;
}
extension->SetManifestData(IncognitoManifestKeys::kIncognito,
std::make_unique<IncognitoInfo>(mode));
return true;
}
bool IncognitoHandler::AlwaysParseForType(Manifest::Type type) const {
return true;
}
base::span<const char* const> IncognitoHandler::Keys() const {
static constexpr const char* kKeys[] = {IncognitoManifestKeys::kIncognito};
return kKeys;
}
} // namespace extensions
|