OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #include "chrome/common/extensions/incognito_handler.h" | |
6 | |
7 #include "base/memory/scoped_ptr.h" | |
8 #include "base/strings/utf_string_conversions.h" | |
9 #include "base/values.h" | |
10 #include "chrome/common/extensions/extension.h" | |
11 #include "extensions/common/manifest_constants.h" | |
12 | |
13 namespace extensions { | |
14 | |
15 namespace keys = manifest_keys; | |
16 | |
17 IncognitoInfo::IncognitoInfo(bool incognito_split_mode) | |
18 : split_mode(incognito_split_mode) { | |
19 } | |
20 | |
21 IncognitoInfo::~IncognitoInfo() { | |
22 } | |
23 | |
24 // static | |
25 bool IncognitoInfo::IsSplitMode(const Extension* extension) { | |
26 IncognitoInfo* info = static_cast<IncognitoInfo*>( | |
27 extension->GetManifestData(keys::kIncognito)); | |
28 return info ? info->split_mode : false; | |
29 } | |
30 | |
31 IncognitoHandler::IncognitoHandler() { | |
32 } | |
33 | |
34 IncognitoHandler::~IncognitoHandler() { | |
35 } | |
36 | |
37 bool IncognitoHandler::Parse(Extension* extension, string16* error) { | |
38 if (!extension->manifest()->HasKey(keys::kIncognito)) { | |
39 // Extensions and Chrome apps default to spanning mode. | |
40 // Hosted and legacy packaged apps default to split mode. | |
41 extension->SetManifestData( | |
42 keys::kIncognito, | |
43 new IncognitoInfo(extension->is_hosted_app() || | |
44 extension->is_legacy_packaged_app())); | |
45 return true; | |
46 } | |
47 | |
48 bool split_mode = false; | |
49 std::string incognito_string; | |
50 if (!extension->manifest()->GetString(keys::kIncognito, &incognito_string)) { | |
51 *error = ASCIIToUTF16(manifest_errors::kInvalidIncognitoBehavior); | |
52 return false; | |
53 } | |
54 | |
55 if (incognito_string == manifest_values::kIncognitoSplit) | |
56 split_mode = true; | |
57 else if (incognito_string != manifest_values::kIncognitoSpanning) { | |
58 // If incognito_string == kIncognitoSpanning, it is valid and | |
59 // split_mode remains false. | |
60 *error = ASCIIToUTF16(manifest_errors::kInvalidIncognitoBehavior); | |
61 return false; | |
62 } | |
63 | |
64 extension->SetManifestData(keys::kIncognito, new IncognitoInfo(split_mode)); | |
65 return true; | |
66 } | |
67 | |
68 bool IncognitoHandler::AlwaysParseForType(Manifest::Type type) const { | |
69 return true; | |
70 } | |
71 | |
72 const std::vector<std::string> IncognitoHandler::Keys() const { | |
73 return SingleKey(keys::kIncognito); | |
74 } | |
75 | |
76 } // namespace extensions | |
OLD | NEW |