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