15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest_constants.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace keys = extensions::manifest_keys;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ChromeManifestTest, StorageAPIManifestVersionAvailability) {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue base_manifest;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base_manifest.SetString(keys::kName, "test");
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base_manifest.SetString(keys::kVersion, "0.1");
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::ListValue* permissions = new base::ListValue();
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    permissions->Append(new base::StringValue("storage"));
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base_manifest.Set(keys::kPermissions, permissions);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string kManifestVersionError =
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "'storage' requires manifest version of at least 2.";
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extension with no manifest version cannot use storage API.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(&base_manifest, "test");
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LoadAndExpectWarning(manifest, kManifestVersionError);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extension with manifest version 1 cannot use storage API.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::DictionaryValue manifest_with_version;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manifest_with_version.SetInteger(keys::kManifestVersion, 1);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manifest_with_version.MergeDictionary(&base_manifest);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(&manifest_with_version, "test");
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LoadAndExpectWarning(manifest, kManifestVersionError);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extension with manifest version 2 *can* use storage API.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::DictionaryValue manifest_with_version;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manifest_with_version.SetInteger(keys::kManifestVersion, 2);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manifest_with_version.MergeDictionary(&base_manifest);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(&manifest_with_version, "test");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<extensions::Extension> extension =
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        LoadAndExpectSuccess(manifest);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(extension->install_warnings().empty());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
53