OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/utf_string_conversions.h" | |
6 #include "chrome/common/extensions/extension_manifest_constants.h" | |
7 #include "chrome/common/extensions/manifest_handler.h" | |
8 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h" | |
9 #include "chrome/common/extensions/web_intents_handler.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 #include "webkit/glue/web_intent_service_data.h" | |
12 | |
13 using extensions::Extension; | |
14 using extensions::WebIntentsInfo; | |
15 | |
16 namespace errors = extension_manifest_errors; | |
17 | |
18 class WebIntentsManifestTest : public ExtensionManifestTest { | |
19 virtual void SetUp() OVERRIDE { | |
20 ExtensionManifestTest::SetUp(); | |
21 extensions::ManifestHandler::Register(extension_manifest_keys::kIntents, | |
22 new extensions::WebIntentsHandler); | |
23 } | |
24 }; | |
25 | |
26 TEST_F(WebIntentsManifestTest, WebIntents) { | |
27 Testcase testcases[] = { | |
28 Testcase("intent_invalid_1.json", errors::kInvalidIntents), | |
29 Testcase("intent_invalid_2.json", errors::kInvalidIntent), | |
30 Testcase("intent_invalid_3.json", errors::kInvalidIntentHref), | |
31 Testcase("intent_invalid_4.json", errors::kInvalidIntentDisposition), | |
32 Testcase("intent_invalid_5.json", errors::kInvalidIntentType), | |
33 Testcase("intent_invalid_6.json", errors::kInvalidIntentTitle), | |
34 Testcase("intent_invalid_packaged_app.json", errors::kCannotAccessPage), | |
35 Testcase("intent_invalid_href_and_path.json", | |
36 errors::kInvalidIntentHrefOldAndNewKey), | |
37 Testcase("intent_invalid_multi_href.json", errors::kInvalidIntent) | |
38 }; | |
39 RunTestcases(testcases, arraysize(testcases), | |
40 EXPECT_TYPE_ERROR); | |
41 | |
42 scoped_refptr<Extension> extension( | |
43 LoadAndExpectSuccess("intent_valid.json")); | |
44 ASSERT_TRUE(extension.get()); | |
Yoyo Zhou
2013/01/05 01:51:19
You can also write this ASSERT_TRUE(extension);
Joe Thomas
2013/01/05 03:02:03
Done.
| |
45 | |
46 ASSERT_EQ(1u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
47 EXPECT_EQ("image/png", | |
48 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].type)); | |
49 EXPECT_EQ("http://webintents.org/share", | |
50 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].action)); | |
51 EXPECT_EQ("chrome-extension", | |
52 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.scheme()); | |
53 EXPECT_EQ("/services/share", | |
54 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.path()); | |
55 EXPECT_EQ("Sample Sharing Intent", | |
56 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].title)); | |
57 EXPECT_EQ(webkit_glue::WebIntentServiceData::DISPOSITION_INLINE, | |
58 WebIntentsInfo::GetIntentsServices(extension)[0].disposition); | |
59 | |
60 // Verify that optional fields are filled with defaults. | |
61 extension = LoadAndExpectSuccess("intent_valid_minimal.json"); | |
62 ASSERT_TRUE(extension.get()); | |
63 | |
64 ASSERT_EQ(1u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
65 EXPECT_EQ("*", | |
66 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].type)); | |
67 EXPECT_EQ("http://webintents.org/share", | |
68 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].action)); | |
69 EXPECT_EQ("", | |
70 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].title)); | |
71 EXPECT_EQ(webkit_glue::WebIntentServiceData::DISPOSITION_WINDOW, | |
72 WebIntentsInfo::GetIntentsServices(extension)[0].disposition); | |
73 | |
74 // Make sure we support href instead of path. | |
75 extension = LoadAndExpectSuccess("intent_valid_using_href.json"); | |
76 ASSERT_TRUE(extension.get()); | |
77 | |
78 ASSERT_EQ(1u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
79 EXPECT_EQ("/services/share", | |
80 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.path()); | |
81 } | |
82 | |
83 TEST_F(WebIntentsManifestTest, WebIntentsWithMultipleMimeTypes) { | |
84 scoped_refptr<Extension> extension( | |
85 LoadAndExpectSuccess("intent_valid_multitype.json")); | |
86 ASSERT_TRUE(extension.get()); | |
87 | |
88 ASSERT_EQ(2u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
89 | |
90 // One registration with multiple types generates a separate service for | |
91 // each MIME type. | |
92 for (int i = 0; i < 2; ++i) { | |
93 EXPECT_EQ("http://webintents.org/share", | |
94 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[i].action)); | |
95 EXPECT_EQ("chrome-extension", | |
96 WebIntentsInfo::GetIntentsServices(extension)[i].service_url.scheme()); | |
97 EXPECT_EQ("/services/share", | |
98 WebIntentsInfo::GetIntentsServices(extension)[i].service_url.path()); | |
99 EXPECT_EQ("Sample Sharing Intent", | |
100 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[i].title)); | |
101 EXPECT_EQ(webkit_glue::WebIntentServiceData::DISPOSITION_INLINE, | |
102 WebIntentsInfo::GetIntentsServices(extension)[i].disposition); | |
103 } | |
104 EXPECT_EQ("image/jpeg", | |
105 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].type)); | |
106 EXPECT_EQ("image/bmp", | |
107 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[1].type)); | |
108 | |
109 LoadAndExpectError("intent_invalid_type_element.json", | |
110 extension_manifest_errors::kInvalidIntentTypeElement); | |
111 } | |
112 | |
113 TEST_F(WebIntentsManifestTest, WebIntentsInHostedApps) { | |
114 Testcase testcases[] = { | |
115 Testcase("intent_invalid_hosted_app_1.json", | |
116 errors::kInvalidIntentPageInHostedApp), | |
117 Testcase("intent_invalid_hosted_app_2.json", | |
118 errors::kInvalidIntentPageInHostedApp), | |
119 Testcase("intent_invalid_hosted_app_3.json", | |
120 errors::kInvalidIntentPageInHostedApp) | |
121 }; | |
122 RunTestcases(testcases, arraysize(testcases), | |
123 EXPECT_TYPE_ERROR); | |
124 | |
125 scoped_refptr<Extension> extension( | |
126 LoadAndExpectSuccess("intent_valid_hosted_app.json")); | |
127 ASSERT_TRUE(extension.get()); | |
128 | |
129 ASSERT_EQ(3u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
130 EXPECT_EQ("http://www.cfp.com/intents/edit.html", | |
131 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.spec()); | |
132 EXPECT_EQ("http://www.cloudfilepicker.com/", | |
133 WebIntentsInfo::GetIntentsServices(extension)[1].service_url.spec()); | |
134 EXPECT_EQ("http://www.cloudfilepicker.com/intents/share.html", | |
135 WebIntentsInfo::GetIntentsServices(extension)[2].service_url.spec()); | |
136 } | |
137 | |
138 TEST_F(WebIntentsManifestTest, WebIntentsMultiHref) { | |
139 scoped_refptr<Extension> extension( | |
140 LoadAndExpectSuccess("intent_valid_multi_href.json")); | |
141 ASSERT_TRUE(extension.get()); | |
142 | |
143 ASSERT_EQ(2u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
144 EXPECT_EQ("chrome-extension", | |
145 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.scheme()); | |
146 EXPECT_EQ("/services/sharelink.html", | |
147 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.path()); | |
148 EXPECT_EQ("text/uri-list", | |
149 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[0].type)); | |
150 EXPECT_EQ("chrome-extension", | |
151 WebIntentsInfo::GetIntentsServices(extension)[1].service_url.scheme()); | |
152 EXPECT_EQ("/services/shareimage.html", | |
153 WebIntentsInfo::GetIntentsServices(extension)[1].service_url.path()); | |
154 EXPECT_EQ("image/*", | |
155 UTF16ToUTF8(WebIntentsInfo::GetIntentsServices(extension)[1].type)); | |
156 } | |
157 | |
158 TEST_F(WebIntentsManifestTest, WebIntentsBlankHref) { | |
159 LoadAndExpectError("intent_invalid_blank_action_extension.json", | |
160 errors::kInvalidIntentHrefEmpty); | |
161 | |
162 scoped_refptr<Extension> extension( | |
163 LoadAndExpectSuccess("intent_valid_blank_action_hosted.json")); | |
164 ASSERT_TRUE(extension.get()); | |
165 | |
166 ASSERT_EQ(1u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
167 EXPECT_EQ("http://www.cloudfilepicker.com/", | |
168 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.spec()); | |
169 | |
170 extension = LoadAndExpectSuccess("intent_valid_blank_action_packaged.json"); | |
171 ASSERT_TRUE(extension.get()); | |
172 | |
173 ASSERT_EQ(1u, WebIntentsInfo::GetIntentsServices(extension).size()); | |
174 EXPECT_EQ("chrome-extension", | |
175 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.scheme()); | |
176 EXPECT_EQ("/main.html", | |
177 WebIntentsInfo::GetIntentsServices(extension)[0].service_url.path()); | |
178 } | |
OLD | NEW |