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

Side by Side Diff: Source/web/tests/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: review comments Created 6 years, 3 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 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/testing/URLTestHelpers.h"
9 #include "public/platform/Platform.h"
10 #include "public/platform/WebURLResponse.h"
11 #include "public/platform/WebUnitTestSupport.h"
12 #include "web/WebLocalFrameImpl.h"
13 #include "web/tests/FrameTestHelpers.h"
14 #include <gtest/gtest.h>
15
16 using namespace blink;
17
18 namespace {
19
20 class TestManifestLoaderFrameClient : public FrameTestHelpers::TestWebFrameClien t {
21 public:
22 TestManifestLoaderFrameClient()
23 : m_succeeded(false)
24 , m_failed(false)
25 {
26 }
27
28 ~TestManifestLoaderFrameClient() { }
29
30 virtual void didLoadManifest(WebLocalFrame* frame, const WebManifest&) OVERR IDE
31 {
32 ASSERT(!m_failed && !m_succeeded);
33 m_succeeded = true;
34 }
35
36 virtual void didFailLoadManifest(WebLocalFrame* frame, WebManifestError erro r) OVERRIDE
37 {
38 ASSERT(!m_failed && !m_succeeded);
39 m_failed = true;
40 m_error = error;
41 }
42
43 bool succeeded() const { return m_succeeded; }
44 bool failed() const { return m_failed; }
45 WebManifestError error() const { return m_error; }
46
47 private:
48 bool m_succeeded;
49 bool m_failed;
50 WebManifestError m_error;
51 };
52
53 class ManifestLoaderTest : public ::testing::Test {
54 protected:
55 enum ManifestResponseType {
56 NoManifestResponse,
57 ManifestResponseSuccess,
58 ManifestResponseError,
59 };
60
61 virtual void TearDown() OVERRIDE;
62
63 void setupAndLoad(const std::string& filename, const std::string& url, Manif estResponseType);
64
65 TestManifestLoaderFrameClient* client()
66 {
67 return &m_client;
68 }
69
70 private:
71 void setupSuccessResponse();
72 void setup404Response();
73 void loadManifestSynchronously();
74
75 LocalFrame* frame()
76 {
77 return m_webViewHelper.webViewImpl()->mainFrameImpl()->frame();
78 }
79
80 FrameTestHelpers::WebViewHelper m_webViewHelper;
81 TestManifestLoaderFrameClient m_client;
82 };
83
84 void ManifestLoaderTest::TearDown()
85 {
86 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
87 }
88
89 void ManifestLoaderTest::setupSuccessResponse()
90 {
91 URLTestHelpers::registerMockedURLLoad(URLTestHelpers::toKURL("http://foo.com /manifest.json"), "dummy_manifest.json", "manifest/", "application/manifest+json ");
kenneth.christiansen 2014/09/02 08:42:23 Other unittests use m_baseURL and www.test.com. I
mlamouri (slow - plz ping) 2014/09/02 15:24:39 Done.
92 }
93
94 void ManifestLoaderTest::setup404Response()
kenneth.christiansen 2014/09/02 08:42:23 I rather have ::addMockedURLWith404Response(url).
mlamouri (slow - plz ping) 2014/09/02 15:24:39 I've added the url as a parameter. Not sure what y
95 {
96 KURL url(ParsedURLString, "http://foo.com/manifest.json");
97
98 WebURLResponse response;
99 response.initialize();
100 response.setMIMEType("application/manifest+json");
101 response.setHTTPStatusCode(404);
102 response.setURL(url);
103
104 WebURLError error;
105 error.reason = 404; // We don't really care but we need a value.
106 Platform::current()->unitTestSupport()->registerMockedErrorURL(url, response , error);
107 }
108
109 void ManifestLoaderTest::loadManifestSynchronously()
110 {
111 // This call is wrapped in a helper call on purpose because we want to get
112 // rid of it. It will make the transition to the new model easier.
113 ManifestLoader::loadManifest(PassRefPtr<LocalFrame>(frame()));
114 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
115 }
116
117 void ManifestLoaderTest::setupAndLoad(const std::string& filename, const std::st ring& url, ManifestResponseType manifestResponse)
118 {
119 URLTestHelpers::registerMockedURLLoad(URLTestHelpers::toKURL(url), WebString ::fromUTF8(filename), "manifest/", "text/html");
120 m_webViewHelper.initializeAndLoad(url, false, &m_client);
121
122 if (manifestResponse == ManifestResponseSuccess)
123 setupSuccessResponse();
kenneth.christiansen 2014/09/02 08:42:23 I think its a bit unclear here that this method ac
mlamouri (slow - plz ping) 2014/09/02 15:24:39 I've renamed the method to include "Manifest" and
124 else if (manifestResponse == ManifestResponseError)
125 setup404Response();
126
127 loadManifestSynchronously();
128 }
129
130 TEST_F(ManifestLoaderTest, NoLinkManifest)
131 {
132 setupAndLoad("no-manifest.html", "http://foo.com/index.html", NoManifestResp onse);
133
134 EXPECT_FALSE(client()->succeeded());
135 EXPECT_TRUE(client()->failed());
136 EXPECT_EQ(WebManifestError::NoManifest, client()->error());
137 }
138
139 TEST_F(ManifestLoaderTest, NoCORSValidURL)
140 {
141 setupAndLoad("no-cors.html", "http://foo.com/index.html", ManifestResponseSu ccess);
142
143 EXPECT_TRUE(client()->succeeded());
144 EXPECT_FALSE(client()->failed());
145 }
146
147 TEST_F(ManifestLoaderTest, NoCORSCrossOriginURL)
148 {
149 setupAndLoad("no-cors.html", "http://bar.com/index.html", ManifestResponseSu ccess);
150
151 EXPECT_TRUE(client()->succeeded());
152 EXPECT_FALSE(client()->failed());
153 }
154
155 TEST_F(ManifestLoaderTest, CORSAnonymousValidURL)
156 {
157 setupAndLoad("cors-anonymous.html", "http://foo.com/index.html", ManifestRes ponseSuccess);
158
159 EXPECT_TRUE(client()->succeeded());
160 EXPECT_FALSE(client()->failed());
161 }
162
163 TEST_F(ManifestLoaderTest, CORSDefaultValidURL)
164 {
165 setupAndLoad("cors-default.html", "http://foo.com/index.html", ManifestRespo nseSuccess);
166
167 EXPECT_TRUE(client()->succeeded());
168 EXPECT_FALSE(client()->failed());
169 }
170
171 TEST_F(ManifestLoaderTest, CORSUseCredentialsValidURL)
172 {
173 setupAndLoad("cors-use-credentials.html", "http://foo.com/index.html", Manif estResponseSuccess);
174
175 EXPECT_TRUE(client()->succeeded());
176 EXPECT_FALSE(client()->failed());
177 }
178
179 TEST_F(ManifestLoaderTest, CORSAnonymousCrossOriginURL)
180 {
181 setupAndLoad("cors-anonymous.html", "http://bar.com/index.html", ManifestRes ponseSuccess);
182
183 EXPECT_FALSE(client()->succeeded());
184 EXPECT_TRUE(client()->failed());
185 EXPECT_EQ(WebManifestError::FetchError, client()->error());
186 }
187
188 TEST_F(ManifestLoaderTest, CORSDefaultCrossOriginURL)
189 {
190 setupAndLoad("cors-default.html", "http://bar.com/index.html", ManifestRespo nseSuccess);
191
192 EXPECT_FALSE(client()->succeeded());
193 EXPECT_TRUE(client()->failed());
194 EXPECT_EQ(WebManifestError::FetchError, client()->error());
195 }
196
197 TEST_F(ManifestLoaderTest, CORSUseCredentialsCrossOriginURL)
198 {
199 setupAndLoad("cors-use-credentials.html", "http://bar.com/index.html", Manif estResponseSuccess);
200
201 EXPECT_FALSE(client()->succeeded());
202 EXPECT_TRUE(client()->failed());
203 EXPECT_EQ(WebManifestError::FetchError, client()->error());
204 }
205
206 TEST_F(ManifestLoaderTest, NoCORS404URL)
207 {
208 setupAndLoad("no-cors.html", "http://foo.com/index.html", ManifestResponseEr ror);
209
210 EXPECT_FALSE(client()->succeeded());
211 EXPECT_TRUE(client()->failed());
212 EXPECT_EQ(WebManifestError::FetchError, client()->error());
213 }
214
215 TEST_F(ManifestLoaderTest, CORS404URL)
216 {
217 setupAndLoad("cors-default.html", "http://foo.com/index.html", ManifestRespo nseError);
218
219 EXPECT_FALSE(client()->succeeded());
220 EXPECT_TRUE(client()->failed());
221 EXPECT_EQ(WebManifestError::FetchError, client()->error());
222 }
223
224 TEST_F(ManifestLoaderTest, CORS404CrossOriginURL)
225 {
226 setupAndLoad("cors-default.html", "http://bar.com/index.html", ManifestRespo nseError);
227
228 EXPECT_FALSE(client()->succeeded());
229 EXPECT_TRUE(client()->failed());
230 EXPECT_EQ(WebManifestError::FetchError, client()->error());
231 }
232
233 } // anonymous namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698