1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extensions_ui.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/json_value_serializer.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static DictionaryValue* DeserializeJSONTestData(const FilePath& path, 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string *error) { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Value* value; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch JSONFileValueSerializer serializer(path); 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch value = serializer.Deserialize(NULL, error); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return static_cast<DictionaryValue*>(value); 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static DictionaryValue* CreateExtensionDetailViewFromPath( 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& extension_path, 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<ExtensionPage>& pages, 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Extension::Location location) { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string error; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath manifest_path = extension_path.Append( 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Extension::kManifestFilename); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<DictionaryValue> extension_data(DeserializeJSONTestData( 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch manifest_path, &error)); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("", error); 35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<Extension> extension(Extension::Create( 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path, location, *extension_data, 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Extension::REQUIRE_KEY | Extension::STRICT_ERROR_CHECKS, &error)); 39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(extension.get()); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("", error); 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return ExtensionsDOMHandler::CreateExtensionDetailValue( 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NULL, extension.get(), pages, true, false); 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static void CompareExpectedAndActualOutput( 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const FilePath& extension_path, 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<ExtensionPage>& pages, 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const FilePath& expected_output_path) { 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string error; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<DictionaryValue> expected_output_data(DeserializeJSONTestData( 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_output_path, &error)); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("", error); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Produce test output. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<DictionaryValue> actual_output_data( 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreateExtensionDetailViewFromPath( 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path, pages, Extension::INVALID)); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Compare the outputs. 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Ignore unknown fields in the actual output data. 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string paths_details = " - expected (" + 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected_output_path.MaybeAsASCII() + ") vs. actual (" + 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path.MaybeAsASCII() + ")"; 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (DictionaryValue::key_iterator key = expected_output_data->begin_keys(); 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen key != expected_output_data->end_keys(); 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ++key) { 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* expected_value = NULL; 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* actual_value = NULL; 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(expected_output_data->Get(*key, &expected_value)) << 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *key + " is missing" + paths_details; 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(actual_output_data->Get(*key, &actual_value)) << 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *key + " is missing" + paths_details; 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (expected_value == NULL) { 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(NULL, actual_value) << *key + paths_details; 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(expected_value->Equals(actual_value)) << *key + 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen paths_details; 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ExtensionUITest, GenerateExtensionsJSONData) { 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath data_test_dir_path, extension_path, expected_output_path; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test Extension1 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch extension_path = data_test_dir_path.AppendASCII("extensions") 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good") 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("Extensions") 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("1.0.0.0"); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<ExtensionPage> pages; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages.push_back(ExtensionPage( 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/bar.html"), 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 42, 88, false)); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages.push_back(ExtensionPage( 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/dog.html"), 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 0, 0, false)); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_output_path = data_test_dir_path.AppendASCII("extensions") 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("ui") 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("create_extension_detail_value_expected_output") 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good-extension1.json"); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompareExpectedAndActualOutput(extension_path, pages, expected_output_path); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(OS_CHROMEOS) 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test Extension2 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch extension_path = data_test_dir_path.AppendASCII("extensions") 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good") 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("Extensions") 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("hpiknbiabeeppbpihjehijgoemciehgk") 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("2"); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_output_path = data_test_dir_path.AppendASCII("extensions") 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("ui") 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("create_extension_detail_value_expected_output") 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good-extension2.json"); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // It's OK to have duplicate URLs, so long as the IDs are different. 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages[1].url = pages[0].url; 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompareExpectedAndActualOutput(extension_path, pages, expected_output_path); 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test Extension3 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch extension_path = data_test_dir_path.AppendASCII("extensions") 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good") 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("Extensions") 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("bjafgdebaacbbbecmhlhpofkepfkgcpa") 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("1.0"); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_output_path = data_test_dir_path.AppendASCII("extensions") 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("ui") 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("create_extension_detail_value_expected_output") 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good-extension3.json"); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages.clear(); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompareExpectedAndActualOutput(extension_path, pages, expected_output_path); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Test that using Extension::LOAD for the extension location triggers the 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// correct values in the details, including location, order, and allow_reload. 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(ExtensionUITest, LocationLoadPropagation) { 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath data_test_dir_path, extension_path; 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path = data_test_dir_path.AppendASCII("extensions") 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("good") 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("Extensions") 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("1.0.0.0"); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<ExtensionPage> pages; 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> extension_details( 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreateExtensionDetailViewFromPath( 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path, pages, Extension::LOAD)); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ui_allow_reload = false; 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ui_is_unpacked = false; 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath::StringType ui_path; 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(extension_details->GetBoolean("allow_reload", &ui_allow_reload)); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(extension_details->GetBoolean("isUnpacked", &ui_is_unpacked)); 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(extension_details->GetString("path", &ui_path)); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(true, ui_allow_reload); 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(true, ui_is_unpacked); 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(extension_path, FilePath(ui_path)); 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Test that using Extension::EXTERNAL_PREF for the extension location triggers 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// the correct values in the details, including location, order, and 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// allow_reload. Contrast to Extension::LOAD, which has somewhat different 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// values. 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(ExtensionUITest, LocationExternalPrefPropagation) { 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath data_test_dir_path, extension_path; 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path = data_test_dir_path.AppendASCII("extensions") 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("good") 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("Extensions") 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("1.0.0.0"); 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<ExtensionPage> pages; 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> extension_details( 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreateExtensionDetailViewFromPath( 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path, pages, Extension::EXTERNAL_PREF)); 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ui_allow_reload = true; 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ui_is_unpacked = true; 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath::StringType ui_path; 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(extension_details->GetBoolean("allow_reload", &ui_allow_reload)); 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(extension_details->GetBoolean("isUnpacked", &ui_is_unpacked)); 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(extension_details->GetString("path", &ui_path)); 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(ui_allow_reload); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(ui_is_unpacked); 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Test that the extension path is correctly propagated into the extension 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// details. 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(ExtensionUITest, PathPropagation) { 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath data_test_dir_path, extension_path; 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path = data_test_dir_path.AppendASCII("extensions") 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("good") 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("Extensions") 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .AppendASCII("1.0.0.0"); 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<ExtensionPage> pages; 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> extension_details( 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreateExtensionDetailViewFromPath( 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_path, pages, Extension::LOAD)); 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath::StringType ui_path; 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(extension_details->GetString("path", &ui_path)); 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(extension_path, FilePath(ui_path)); 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 233