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

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

Issue 11741014: Move 'intents' parsing out of Extension (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: lazy instance 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
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698