1// Copyright (c) 2012 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/manifest_tests/chrome_manifest_test.h"
6
7#include "extensions/common/manifest_constants.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace keys = extensions::manifest_keys;
11
12TEST_F(ChromeManifestTest, StorageAPIManifestVersionAvailability) {
13  base::DictionaryValue base_manifest;
14  {
15    base_manifest.SetString(keys::kName, "test");
16    base_manifest.SetString(keys::kVersion, "0.1");
17    base::ListValue* permissions = new base::ListValue();
18    permissions->Append(new base::StringValue("storage"));
19    base_manifest.Set(keys::kPermissions, permissions);
20  }
21
22  std::string kManifestVersionError =
23      "'storage' requires manifest version of at least 2.";
24
25  // Extension with no manifest version cannot use storage API.
26  {
27    ManifestData manifest(&base_manifest, "test");
28    LoadAndExpectWarning(manifest, kManifestVersionError);
29  }
30
31  // Extension with manifest version 1 cannot use storage API.
32  {
33    base::DictionaryValue manifest_with_version;
34    manifest_with_version.SetInteger(keys::kManifestVersion, 1);
35    manifest_with_version.MergeDictionary(&base_manifest);
36
37    ManifestData manifest(&manifest_with_version, "test");
38    LoadAndExpectWarning(manifest, kManifestVersionError);
39  }
40
41  // Extension with manifest version 2 *can* use storage API.
42  {
43    base::DictionaryValue manifest_with_version;
44    manifest_with_version.SetInteger(keys::kManifestVersion, 2);
45    manifest_with_version.MergeDictionary(&base_manifest);
46
47    ManifestData manifest(&manifest_with_version, "test");
48    scoped_refptr<extensions::Extension> extension =
49        LoadAndExpectSuccess(manifest);
50    EXPECT_TRUE(extension->install_warnings().empty());
51  }
52}
53