settings_overrides_handler_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
1// Copyright 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/manifest_handlers/settings_overrides_handler.h"
6
7#include "base/json/json_string_value_serializer.h"
8#include "base/strings/utf_string_conversions.h"
9#include "chrome/common/extensions/extension.h"
10#include "chrome/common/extensions/features/feature_channel.h"
11#include "chrome/common/extensions/manifest_url_handler.h"
12#include "extensions/common/manifest_constants.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace {
16
17const char kManifest[] = "{"
18    " \"version\" : \"1.0.0.0\","
19    " \"name\" : \"Test\","
20    " \"chrome_settings_overrides\" : {"
21    "   \"homepage\" : \"http://www.homepage.com\","
22    "   \"search_provider\" : {"
23    "        \"name\" : \"first\","
24    "        \"keyword\" : \"firstkey\","
25    "        \"search_url\" : \"http://www.foo.com/s?q={searchTerms}\","
26    "        \"favicon_url\" : \"http://www.foo.com/favicon.ico\","
27    "        \"suggest_url\" : \"http://www.foo.com/s?q={searchTerms}\","
28    "        \"encoding\" : \"UTF-8\","
29    "        \"is_default\" : true"
30    "    },"
31    "   \"startup_pages\" : [\"http://www.startup.com\"]"
32    "  }"
33    "}";
34
35using extensions::api::manifest_types::ChromeSettingsOverrides;
36using extensions::Extension;
37using extensions::Manifest;
38using extensions::SettingsOverrides;
39namespace manifest_keys = extensions::manifest_keys;
40
41class DeclarativeSettingsTest : public testing::Test {
42};
43
44
45TEST_F(DeclarativeSettingsTest, ParseManifest) {
46  extensions::ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV);
47  std::string manifest(kManifest);
48  JSONStringValueSerializer json(&manifest);
49  std::string error;
50  scoped_ptr<base::Value> root(json.Deserialize(NULL, &error));
51  ASSERT_TRUE(root);
52  ASSERT_TRUE(root->IsType(base::Value::TYPE_DICTIONARY));
53  scoped_refptr<Extension> extension = Extension::Create(
54      base::FilePath(FILE_PATH_LITERAL("//nonexistent")),
55      Manifest::INVALID_LOCATION,
56      *static_cast<base::DictionaryValue*>(root.get()),
57      Extension::NO_FLAGS,
58      &error);
59  ASSERT_TRUE(extension);
60  ASSERT_TRUE(extension->manifest()->HasPath(manifest_keys::kSettingsOverride));
61
62  SettingsOverrides* settings_override = static_cast<SettingsOverrides*>(
63        extension->GetManifestData(manifest_keys::kSettingsOverride));
64  ASSERT_TRUE(settings_override);
65  ASSERT_TRUE(settings_override->search_engine);
66  EXPECT_TRUE(settings_override->search_engine->is_default);
67  const ChromeSettingsOverrides::Search_provider* search_engine =
68      settings_override->search_engine.get();
69  EXPECT_EQ("first", search_engine->name);
70  EXPECT_EQ("firstkey", search_engine->keyword);
71  EXPECT_EQ("http://www.foo.com/s?q={searchTerms}", search_engine->search_url);
72  EXPECT_EQ("http://www.foo.com/favicon.ico", search_engine->favicon_url);
73  EXPECT_EQ("http://www.foo.com/s?q={searchTerms}",
74            *search_engine->suggest_url);
75  EXPECT_EQ("UTF-8", search_engine->encoding);
76
77  EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.com")),
78            settings_override->startup_pages);
79
80  ASSERT_TRUE(settings_override->homepage);
81  EXPECT_EQ(GURL("http://www.homepage.com"), *settings_override->homepage);
82}
83
84}  // namespace
85