Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Side by Side Diff: chrome/common/extensions/manifest_tests/extension_manifests_web_unittest.cc

Issue 11741014: Move 'intents' parsing out of Extension (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed special_storage_policy unittest Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h" 5 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
6 6
7 #include "base/string_number_conversions.h" 7 #include "base/string_number_conversions.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/common/extensions/extension_manifest_constants.h" 9 #include "chrome/common/extensions/extension_manifest_constants.h"
10 #include "extensions/common/error_utils.h" 10 #include "extensions/common/error_utils.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "webkit/glue/web_intent_service_data.h"
13 12
14 using extensions::ErrorUtils; 13 using extensions::ErrorUtils;
15 using extensions::Extension; 14 using extensions::Extension;
16 15
17 namespace errors = extension_manifest_errors; 16 namespace errors = extension_manifest_errors;
18 17
19 TEST_F(ExtensionManifestTest, WebAccessibleResources) { 18 TEST_F(ExtensionManifestTest, WebAccessibleResources) {
20 // Manifest version 2 with web accessible resources specified. 19 // Manifest version 2 with web accessible resources specified.
21 scoped_refptr<Extension> extension1( 20 scoped_refptr<Extension> extension1(
22 LoadAndExpectSuccess("web_accessible_resources_1.json")); 21 LoadAndExpectSuccess("web_accessible_resources_1.json"));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 EXPECT_TRUE(extension4->IsResourceWebAccessible("none")); 59 EXPECT_TRUE(extension4->IsResourceWebAccessible("none"));
61 60
62 EXPECT_TRUE(extension5->IsResourceWebAccessible("anything")); 61 EXPECT_TRUE(extension5->IsResourceWebAccessible("anything"));
63 EXPECT_TRUE(extension5->IsResourceWebAccessible("path/anything")); 62 EXPECT_TRUE(extension5->IsResourceWebAccessible("path/anything"));
64 63
65 EXPECT_TRUE(extension6->IsResourceWebAccessible("path/anything.ext")); 64 EXPECT_TRUE(extension6->IsResourceWebAccessible("path/anything.ext"));
66 EXPECT_FALSE(extension6->IsResourceWebAccessible("anything.ext")); 65 EXPECT_FALSE(extension6->IsResourceWebAccessible("anything.ext"));
67 EXPECT_FALSE(extension6->IsResourceWebAccessible("path/anything.badext")); 66 EXPECT_FALSE(extension6->IsResourceWebAccessible("path/anything.badext"));
68 } 67 }
69 68
70 TEST_F(ExtensionManifestTest, WebIntents) {
71 Testcase testcases[] = {
72 Testcase("intent_invalid_1.json", errors::kInvalidIntents),
73 Testcase("intent_invalid_2.json", errors::kInvalidIntent),
74 Testcase("intent_invalid_3.json", errors::kInvalidIntentHref),
75 Testcase("intent_invalid_4.json", errors::kInvalidIntentDisposition),
76 Testcase("intent_invalid_5.json", errors::kInvalidIntentType),
77 Testcase("intent_invalid_6.json", errors::kInvalidIntentTitle),
78 Testcase("intent_invalid_packaged_app.json", errors::kCannotAccessPage),
79 Testcase("intent_invalid_href_and_path.json",
80 errors::kInvalidIntentHrefOldAndNewKey),
81 Testcase("intent_invalid_multi_href.json", errors::kInvalidIntent)
82 };
83 RunTestcases(testcases, arraysize(testcases),
84 EXPECT_TYPE_ERROR);
85
86 scoped_refptr<Extension> extension(
87 LoadAndExpectSuccess("intent_valid.json"));
88 ASSERT_TRUE(extension.get() != NULL);
89
90 ASSERT_EQ(1u, extension->intents_services().size());
91 EXPECT_EQ("image/png", UTF16ToUTF8(extension->intents_services()[0].type));
92 EXPECT_EQ("http://webintents.org/share",
93 UTF16ToUTF8(extension->intents_services()[0].action));
94 EXPECT_EQ("chrome-extension",
95 extension->intents_services()[0].service_url.scheme());
96 EXPECT_EQ("/services/share",
97 extension->intents_services()[0].service_url.path());
98 EXPECT_EQ("Sample Sharing Intent",
99 UTF16ToUTF8(extension->intents_services()[0].title));
100 EXPECT_EQ(webkit_glue::WebIntentServiceData::DISPOSITION_INLINE,
101 extension->intents_services()[0].disposition);
102
103 // Verify that optional fields are filled with defaults.
104 extension = LoadAndExpectSuccess("intent_valid_minimal.json");
105 ASSERT_TRUE(extension.get() != NULL);
106
107 ASSERT_EQ(1u, extension->intents_services().size());
108 EXPECT_EQ("*", UTF16ToUTF8(extension->intents_services()[0].type));
109 EXPECT_EQ("http://webintents.org/share",
110 UTF16ToUTF8(extension->intents_services()[0].action));
111 EXPECT_EQ("", UTF16ToUTF8(extension->intents_services()[0].title));
112 EXPECT_EQ(webkit_glue::WebIntentServiceData::DISPOSITION_WINDOW,
113 extension->intents_services()[0].disposition);
114
115 // Make sure we support href instead of path.
116 extension = LoadAndExpectSuccess("intent_valid_using_href.json");
117 ASSERT_TRUE(extension.get() != NULL);
118 ASSERT_EQ(1u, extension->intents_services().size());
119 EXPECT_EQ("/services/share",
120 extension->intents_services()[0].service_url.path());
121 }
122
123 TEST_F(ExtensionManifestTest, WebIntentsWithMultipleMimeTypes) {
124 scoped_refptr<Extension> extension(
125 LoadAndExpectSuccess("intent_valid_multitype.json"));
126 ASSERT_TRUE(extension.get() != NULL);
127
128 ASSERT_EQ(2u, extension->intents_services().size());
129
130 // One registration with multiple types generates a separate service for
131 // each MIME type.
132 for (int i = 0; i < 2; ++i) {
133 EXPECT_EQ("http://webintents.org/share",
134 UTF16ToUTF8(extension->intents_services()[i].action));
135 EXPECT_EQ("chrome-extension",
136 extension->intents_services()[i].service_url.scheme());
137 EXPECT_EQ("/services/share",
138 extension->intents_services()[i].service_url.path());
139 EXPECT_EQ("Sample Sharing Intent",
140 UTF16ToUTF8(extension->intents_services()[i].title));
141 EXPECT_EQ(webkit_glue::WebIntentServiceData::DISPOSITION_INLINE,
142 extension->intents_services()[i].disposition);
143 }
144 EXPECT_EQ("image/jpeg", UTF16ToUTF8(extension->intents_services()[0].type));
145 EXPECT_EQ("image/bmp", UTF16ToUTF8(extension->intents_services()[1].type));
146
147 LoadAndExpectError("intent_invalid_type_element.json",
148 extension_manifest_errors::kInvalidIntentTypeElement);
149 }
150
151 TEST_F(ExtensionManifestTest, WebIntentsInHostedApps) {
152 Testcase testcases[] = {
153 Testcase("intent_invalid_hosted_app_1.json",
154 errors::kInvalidIntentPageInHostedApp),
155 Testcase("intent_invalid_hosted_app_2.json",
156 errors::kInvalidIntentPageInHostedApp),
157 Testcase("intent_invalid_hosted_app_3.json",
158 errors::kInvalidIntentPageInHostedApp)
159 };
160 RunTestcases(testcases, arraysize(testcases),
161 EXPECT_TYPE_ERROR);
162
163 scoped_refptr<Extension> extension(
164 LoadAndExpectSuccess("intent_valid_hosted_app.json"));
165 ASSERT_TRUE(extension.get() != NULL);
166
167 ASSERT_EQ(3u, extension->intents_services().size());
168
169 EXPECT_EQ("http://www.cfp.com/intents/edit.html",
170 extension->intents_services()[0].service_url.spec());
171 EXPECT_EQ("http://www.cloudfilepicker.com/",
172 extension->intents_services()[1].service_url.spec());
173 EXPECT_EQ("http://www.cloudfilepicker.com/intents/share.html",
174 extension->intents_services()[2].service_url.spec());
175 }
176
177 TEST_F(ExtensionManifestTest, WebIntentsMultiHref) {
178 scoped_refptr<Extension> extension(
179 LoadAndExpectSuccess("intent_valid_multi_href.json"));
180 ASSERT_TRUE(extension.get() != NULL);
181 ASSERT_EQ(2u, extension->intents_services().size());
182
183 const std::vector<webkit_glue::WebIntentServiceData> &intents =
184 extension->intents_services();
185
186 EXPECT_EQ("chrome-extension", intents[0].service_url.scheme());
187 EXPECT_EQ("/services/sharelink.html",intents[0].service_url.path());
188 EXPECT_EQ("text/uri-list",UTF16ToUTF8(intents[0].type));
189
190 EXPECT_EQ("chrome-extension", intents[1].service_url.scheme());
191 EXPECT_EQ("/services/shareimage.html",intents[1].service_url.path());
192 EXPECT_EQ("image/*",UTF16ToUTF8(intents[1].type));
193 }
194
195 TEST_F(ExtensionManifestTest, WebIntentsBlankHref) {
196 LoadAndExpectError("intent_invalid_blank_action_extension.json",
197 errors::kInvalidIntentHrefEmpty);
198
199 scoped_refptr<Extension> extension(
200 LoadAndExpectSuccess("intent_valid_blank_action_hosted.json"));
201 ASSERT_TRUE(extension.get() != NULL);
202 ASSERT_EQ(1u, extension->intents_services().size());
203 EXPECT_EQ("http://www.cloudfilepicker.com/",
204 extension->intents_services()[0].service_url.spec());
205
206 extension = LoadAndExpectSuccess("intent_valid_blank_action_packaged.json");
207 ASSERT_TRUE(extension.get() != NULL);
208 ASSERT_EQ(1u, extension->intents_services().size());
209 EXPECT_EQ("chrome-extension",
210 extension->intents_services()[0].service_url.scheme());
211 EXPECT_EQ("/main.html",extension->intents_services()[0].service_url.path());
212 }
213
214 TEST_F(ExtensionManifestTest, AppWebUrls) { 69 TEST_F(ExtensionManifestTest, AppWebUrls) {
215 Testcase testcases[] = { 70 Testcase testcases[] = {
216 Testcase("web_urls_wrong_type.json", errors::kInvalidWebURLs), 71 Testcase("web_urls_wrong_type.json", errors::kInvalidWebURLs),
217 Testcase("web_urls_invalid_1.json", 72 Testcase("web_urls_invalid_1.json",
218 ErrorUtils::FormatErrorMessage( 73 ErrorUtils::FormatErrorMessage(
219 errors::kInvalidWebURL, 74 errors::kInvalidWebURL,
220 base::IntToString(0), 75 base::IntToString(0),
221 errors::kExpectString)), 76 errors::kExpectString)),
222 Testcase("web_urls_invalid_2.json", 77 Testcase("web_urls_invalid_2.json",
223 ErrorUtils::FormatErrorMessage( 78 ErrorUtils::FormatErrorMessage(
(...skipping 21 matching lines...) Expand all
245 EXPECT_TYPE_ERROR); 100 EXPECT_TYPE_ERROR);
246 101
247 LoadAndExpectSuccess("web_urls_has_port.json"); 102 LoadAndExpectSuccess("web_urls_has_port.json");
248 103
249 scoped_refptr<Extension> extension( 104 scoped_refptr<Extension> extension(
250 LoadAndExpectSuccess("web_urls_default.json")); 105 LoadAndExpectSuccess("web_urls_default.json"));
251 ASSERT_EQ(1u, extension->web_extent().patterns().size()); 106 ASSERT_EQ(1u, extension->web_extent().patterns().size());
252 EXPECT_EQ("*://www.google.com/*", 107 EXPECT_EQ("*://www.google.com/*",
253 extension->web_extent().patterns().begin()->GetAsString()); 108 extension->web_extent().patterns().begin()->GetAsString());
254 } 109 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698