Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / extensions / common / manifest_handlers / incognito_info.cc
blobb7dc8b28138c3aa6b91fd47bb213d209a2575a6a
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "extensions/common/manifest_handlers/incognito_info.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "base/values.h"
10 #include "extensions/common/extension.h"
11 #include "extensions/common/manifest_constants.h"
13 namespace extensions {
15 namespace keys = manifest_keys;
17 IncognitoInfo::IncognitoInfo(Mode mode) : mode(mode) {}
19 IncognitoInfo::~IncognitoInfo() {
22 // static
23 bool IncognitoInfo::IsSplitMode(const Extension* extension) {
24 IncognitoInfo* info = static_cast<IncognitoInfo*>(
25 extension->GetManifestData(keys::kIncognito));
26 return info ? info->mode == Mode::SPLIT : false;
29 // static
30 bool IncognitoInfo::IsIncognitoAllowed(const Extension* extension) {
31 IncognitoInfo* info =
32 static_cast<IncognitoInfo*>(extension->GetManifestData(keys::kIncognito));
33 return info ? info->mode != Mode::NOT_ALLOWED : true;
36 IncognitoHandler::IncognitoHandler() {
39 IncognitoHandler::~IncognitoHandler() {
42 bool IncognitoHandler::Parse(Extension* extension, base::string16* error) {
43 // Extensions and Chrome apps default to spanning mode.
44 // Hosted and legacy packaged apps default to split mode.
45 IncognitoInfo::Mode mode =
46 extension->is_hosted_app() || extension->is_legacy_packaged_app()
47 ? IncognitoInfo::Mode::SPLIT
48 : IncognitoInfo::Mode::SPANNING;
49 if (!extension->manifest()->HasKey(keys::kIncognito)) {
50 extension->SetManifestData(keys::kIncognito, new IncognitoInfo(mode));
51 return true;
54 std::string incognito_string;
55 if (!extension->manifest()->GetString(keys::kIncognito, &incognito_string)) {
56 *error = base::ASCIIToUTF16(manifest_errors::kInvalidIncognitoBehavior);
57 return false;
60 if (incognito_string == manifest_values::kIncognitoSplit) {
61 mode = IncognitoInfo::Mode::SPLIT;
62 } else if (incognito_string == manifest_values::kIncognitoSpanning) {
63 mode = IncognitoInfo::Mode::SPANNING;
64 } else if (incognito_string == manifest_values::kIncognitoNotAllowed) {
65 mode = IncognitoInfo::Mode::NOT_ALLOWED;
66 } else {
67 *error = base::ASCIIToUTF16(manifest_errors::kInvalidIncognitoBehavior);
68 return false;
71 extension->SetManifestData(keys::kIncognito, new IncognitoInfo(mode));
72 return true;
75 bool IncognitoHandler::AlwaysParseForType(Manifest::Type type) const {
76 return true;
79 const std::vector<std::string> IncognitoHandler::Keys() const {
80 return SingleKey(keys::kIncognito);
83 } // namespace extensions