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

Side by Side Diff: Source/core/loader/ManifestLoaderTest.cpp

Issue 295063002: [NotLanded] Implement the fetching algorithm of the Web Manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 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
« no previous file with comments | « Source/core/loader/ManifestLoader.cpp ('k') | Source/platform/RuntimeEnabledFeatures.in » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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 "config.h"
6 #include "core/loader/ManifestLoader.h"
7
8 #include "core/html/HTMLHeadElement.h"
9 #include "core/html/HTMLLinkElement.h"
10 #include "core/testing/DummyPageHolder.h"
11 #include "public/platform/Platform.h"
12 #include "public/platform/WebManifestRequest.h"
13 #include "public/platform/WebURL.h"
14 #include "public/platform/WebURLResponse.h"
15 #include "public/platform/WebUnitTestSupport.h"
16 #include <gtest/gtest.h>
17
18 using namespace WebCore;
19
20 namespace {
21
22 class ManifestRequest : public blink::WebManifestRequest {
23 public:
24 ManifestRequest()
25 : m_succeeded(false)
26 , m_failed(false)
27 {
28 }
29
30 virtual void requestSucceeded(const blink::WebManifest&) OVERRIDE
31 {
32 ASSERT(!m_failed && !m_succeeded);
33 m_succeeded = true;
34 }
35
36 virtual void requestFailed(FailureReason reason) OVERRIDE
37 {
38 ASSERT(!m_failed && !m_succeeded);
39 m_failed = true;
40 m_reason = reason;
41 }
42
43 bool succeeded() const { return m_succeeded; }
44 bool failed() const { return m_failed; }
45 bool finished() const { return m_succeeded || m_failed; }
46 FailureReason reason() const { return m_reason; }
47
48 private:
49 bool m_succeeded;
50 bool m_failed;
51 FailureReason m_reason;
52 };
53
54 class ManifestLoaderTest : public ::testing::Test {
55 protected:
56 enum CorsType {
57 NoCors,
58 CorsEmptyString,
59 CorsAnonymous,
60 CorsUseCredentials
61 };
62
63 virtual void SetUp() OVERRIDE;
64 virtual void TearDown() OVERRIDE;
65
66 void setURL(const String& url)
67 {
68 m_url = new KURL(ParsedURLString, url);
69 }
70
71 void setupSuccessResponse();
72 void setup404Response();
73 void setupLinkManifest(CorsType);
74
75 Document* document() { return &m_dummyPageHolder->document(); }
76 ManifestRequest* request() { return &m_request; }
77
78 private:
79 OwnPtr<DummyPageHolder> m_dummyPageHolder;
80 ManifestRequest m_request;
81 KURL* m_url;
82 };
83
84 void ManifestLoaderTest::SetUp()
85 {
86 m_url = 0;
87 m_dummyPageHolder = DummyPageHolder::create();
88 KURL url(ParsedURLString, "http://foo.com/index.html");
89 document()->setURL(url);
90 document()->updateSecurityOrigin(SecurityOrigin::create(url));
91 }
92
93 void ManifestLoaderTest::TearDown()
94 {
95 blink::Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
96
97 if (m_url) {
98 delete m_url;
99 }
100 }
101
102 void ManifestLoaderTest::setupSuccessResponse()
103 {
104 ASSERT(m_url);
105
106 blink::WebURLResponse response;
107 response.initialize();
108 response.setMIMEType("application/manifest+json");
109 response.setURL(*m_url);
110 WTF::String localPath = String(blink::Platform::current()->unitTestSupport() ->webKitRootDir()) + "/Source/web/tests/data/manifest.json";
111 blink::Platform::current()->unitTestSupport()->registerMockedURL(*m_url, res ponse, localPath);
112 }
113
114 void ManifestLoaderTest::setup404Response()
115 {
116 ASSERT(m_url);
117
118 blink::WebURLResponse response;
119 response.initialize();
120 response.setMIMEType("application/manifest+json");
121 response.setHTTPStatusCode(404);
122 response.setURL(*m_url);
123
124 blink::WebURLError error;
125 error.reason = 404; // We don't really care but we need a value.
126 blink::Platform::current()->unitTestSupport()->registerMockedErrorURL(*m_url , response, error);
127 }
128
129 void ManifestLoaderTest::setupLinkManifest(CorsType cors)
130 {
131 ASSERT(m_url);
132
133 RefPtrWillBeRawPtr<HTMLLinkElement> link = HTMLLinkElement::create(*document (), false);
134 link->setAttribute(WebCore::HTMLNames::relAttr, "manifest");
135 link->setAttribute(WebCore::HTMLNames::hrefAttr, AtomicString(m_url->string( )));
136 switch (cors) {
137 case CorsEmptyString:
138 link->setAttribute(WebCore::HTMLNames::crossoriginAttr, "");
139 break;
140 case CorsAnonymous:
141 link->setAttribute(WebCore::HTMLNames::crossoriginAttr, "anonymous");
142 break;
143 case CorsUseCredentials:
144 link->setAttribute(WebCore::HTMLNames::crossoriginAttr, "use-credentials ");
145 break;
146 case NoCors:
147 // do nothing.
148 break;
149 }
150 document()->head()->appendChild(link);
151 }
152
153 TEST_F(ManifestLoaderTest, NoLinkManifest)
154 {
155 ManifestLoader::LoadManifest(request(), document());
156
157 EXPECT_FALSE(request()->succeeded());
158 EXPECT_TRUE(request()->failed());
159 EXPECT_EQ(blink::WebManifestRequest::NoLinkManifest, request()->reason());
160 }
161
162 TEST_F(ManifestLoaderTest, NoCorsValidURL)
163 {
164 setURL("http://foo.com/manifest.json");
165 setupSuccessResponse();
166 setupLinkManifest(NoCors);
167
168 ManifestLoader::LoadManifest(request(), document());
dcheng 2014/05/20 20:11:30 Is there any particular reason not to use WebViewH
mlamouri (slow - plz ping) 2014/05/20 20:17:03 I had no need for it so I didn't use it.
169
170 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
171
172 EXPECT_TRUE(request()->succeeded());
173 EXPECT_FALSE(request()->failed());
174 }
175
176 TEST_F(ManifestLoaderTest, NoCorsCrossOriginURL)
177 {
178 setURL("http://example.com/manifest.json");
179 setupSuccessResponse();
180 setupLinkManifest(NoCors);
181
182 ManifestLoader::LoadManifest(request(), document());
183
184 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
185
186 EXPECT_TRUE(request()->succeeded());
187 EXPECT_FALSE(request()->failed());
188 }
189
190 TEST_F(ManifestLoaderTest, CorsAnonymousValidURL)
191 {
192 setURL("http://foo.com/manifest.json");
193 setupSuccessResponse();
194 setupLinkManifest(CorsAnonymous);
195
196 ManifestLoader::LoadManifest(request(), document());
197
198 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
199
200 EXPECT_TRUE(request()->succeeded());
201 EXPECT_FALSE(request()->failed());
202 }
203
204 TEST_F(ManifestLoaderTest, CorsDefaultValidURL)
205 {
206 setURL("http://foo.com/manifest.json");
207 setupSuccessResponse();
208 setupLinkManifest(CorsEmptyString);
209
210 ManifestLoader::LoadManifest(request(), document());
211
212 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
213
214 EXPECT_TRUE(request()->succeeded());
215 EXPECT_FALSE(request()->failed());
216 }
217
218 TEST_F(ManifestLoaderTest, CorsUseCredentialsValidURL)
219 {
220 setURL("http://foo.com/manifest.json");
221 setupSuccessResponse();
222 setupLinkManifest(CorsUseCredentials);
223
224 ManifestLoader::LoadManifest(request(), document());
225
226 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
227
228 EXPECT_TRUE(request()->succeeded());
229 EXPECT_FALSE(request()->failed());
230 }
231
232 TEST_F(ManifestLoaderTest, CorsAnonymousCrossOriginURL)
233 {
234 setURL("http://example.com/manifest.json");
235 setupSuccessResponse();
236 setupLinkManifest(CorsAnonymous);
237
238 ManifestLoader::LoadManifest(request(), document());
239
240 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
241
242 EXPECT_FALSE(request()->succeeded());
243 EXPECT_TRUE(request()->failed());
244 EXPECT_EQ(blink::WebManifestRequest::NetworkError, request()->reason());
245 }
246
247 TEST_F(ManifestLoaderTest, CorsDefaultCrossOriginURL)
248 {
249 setURL("http://example.com/manifest.json");
250 setupSuccessResponse();
251 setupLinkManifest(CorsEmptyString);
252
253 ManifestLoader::LoadManifest(request(), document());
254
255 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
256
257 EXPECT_FALSE(request()->succeeded());
258 EXPECT_TRUE(request()->failed());
259 EXPECT_EQ(blink::WebManifestRequest::NetworkError, request()->reason());
260 }
261
262 TEST_F(ManifestLoaderTest, CorsUseCredentialsCrossOriginURL)
263 {
264 setURL("http://example.com/manifest.json");
265 setupSuccessResponse();
266 setupLinkManifest(CorsUseCredentials);
267
268 ManifestLoader::LoadManifest(request(), document());
269
270 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
271
272 EXPECT_FALSE(request()->succeeded());
273 EXPECT_TRUE(request()->failed());
274 EXPECT_EQ(blink::WebManifestRequest::NetworkError, request()->reason());
275 }
276
277 TEST_F(ManifestLoaderTest, NoCors404URL)
278 {
279 setURL("http://foo.com/manifest.json");
280 setup404Response();
281 setupLinkManifest(NoCors);
282
283 ManifestLoader::LoadManifest(request(), document());
284
285 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
286
287 EXPECT_FALSE(request()->succeeded());
288 EXPECT_TRUE(request()->failed());
289 EXPECT_EQ(blink::WebManifestRequest::NetworkError, request()->reason());
290 }
291
292 TEST_F(ManifestLoaderTest, Cors404URL)
293 {
294 setURL("http://foo.com/manifest.json");
295 setup404Response();
296 setupLinkManifest(CorsEmptyString);
297
298 ManifestLoader::LoadManifest(request(), document());
299
300 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
301
302 EXPECT_FALSE(request()->succeeded());
303 EXPECT_TRUE(request()->failed());
304 EXPECT_EQ(blink::WebManifestRequest::NetworkError, request()->reason());
305 }
306
307 TEST_F(ManifestLoaderTest, Cors404CrossOriginURL)
308 {
309 setURL("http://example.com/manifest.json");
310 setup404Response();
311 setupLinkManifest(CorsEmptyString);
312
313 ManifestLoader::LoadManifest(request(), document());
314
315 blink::Platform::current()->unitTestSupport()->serveAsynchronousMockedReques ts();
316
317 EXPECT_FALSE(request()->succeeded());
318 EXPECT_TRUE(request()->failed());
319 EXPECT_EQ(blink::WebManifestRequest::NetworkError, request()->reason());
320 }
321
322 } // anonymous namespace
OLDNEW
« no previous file with comments | « Source/core/loader/ManifestLoader.cpp ('k') | Source/platform/RuntimeEnabledFeatures.in » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698