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