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

Side by Side Diff: Source/web/tests/WebFrameTest.cpp

Issue 570563003: Implement CSP check for manifest fetching (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed nit from mkwst Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « Source/web/AssociatedURLLoader.cpp ('k') | Source/web/tests/data/link-manifest-fetch.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "core/css/resolver/ViewportStyleResolver.h" 42 #include "core/css/resolver/ViewportStyleResolver.h"
43 #include "core/dom/DocumentMarkerController.h" 43 #include "core/dom/DocumentMarkerController.h"
44 #include "core/dom/Fullscreen.h" 44 #include "core/dom/Fullscreen.h"
45 #include "core/dom/NodeRenderStyle.h" 45 #include "core/dom/NodeRenderStyle.h"
46 #include "core/dom/Range.h" 46 #include "core/dom/Range.h"
47 #include "core/editing/Editor.h" 47 #include "core/editing/Editor.h"
48 #include "core/editing/FrameSelection.h" 48 #include "core/editing/FrameSelection.h"
49 #include "core/editing/SpellChecker.h" 49 #include "core/editing/SpellChecker.h"
50 #include "core/editing/VisiblePosition.h" 50 #include "core/editing/VisiblePosition.h"
51 #include "core/events/MouseEvent.h" 51 #include "core/events/MouseEvent.h"
52 #include "core/fetch/FetchRequest.h"
52 #include "core/fetch/MemoryCache.h" 53 #include "core/fetch/MemoryCache.h"
54 #include "core/fetch/ResourceFetcher.h"
53 #include "core/frame/FrameHost.h" 55 #include "core/frame/FrameHost.h"
54 #include "core/frame/FrameView.h" 56 #include "core/frame/FrameView.h"
55 #include "core/frame/LocalFrame.h" 57 #include "core/frame/LocalFrame.h"
56 #include "core/frame/PinchViewport.h" 58 #include "core/frame/PinchViewport.h"
57 #include "core/frame/Settings.h" 59 #include "core/frame/Settings.h"
58 #include "core/html/HTMLDocument.h" 60 #include "core/html/HTMLDocument.h"
59 #include "core/html/HTMLFormElement.h" 61 #include "core/html/HTMLFormElement.h"
60 #include "core/loader/DocumentThreadableLoader.h" 62 #include "core/loader/DocumentThreadableLoader.h"
61 #include "core/loader/DocumentThreadableLoaderClient.h" 63 #include "core/loader/DocumentThreadableLoaderClient.h"
62 #include "core/loader/FrameLoadRequest.h" 64 #include "core/loader/FrameLoadRequest.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 147
146 class FakeCompositingWebViewClient : public FrameTestHelpers::TestWebViewClient { 148 class FakeCompositingWebViewClient : public FrameTestHelpers::TestWebViewClient {
147 public: 149 public:
148 virtual bool enterFullScreen() OVERRIDE { return true; } 150 virtual bool enterFullScreen() OVERRIDE { return true; }
149 }; 151 };
150 152
151 class WebFrameTest : public testing::Test { 153 class WebFrameTest : public testing::Test {
152 protected: 154 protected:
153 WebFrameTest() 155 WebFrameTest()
154 : m_baseURL("http://www.test.com/") 156 : m_baseURL("http://www.test.com/")
157 , m_notBaseURL("http://www.nottest.com/")
155 , m_chromeURL("chrome://") 158 , m_chromeURL("chrome://")
156 { 159 {
157 } 160 }
158 161
159 virtual ~WebFrameTest() 162 virtual ~WebFrameTest()
160 { 163 {
161 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); 164 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
162 } 165 }
163 166
164 void registerMockedHttpURLLoad(const std::string& fileName) 167 void registerMockedHttpURLLoad(const std::string& fileName)
165 { 168 {
166 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU RL.c_str()), WebString::fromUTF8(fileName.c_str())); 169 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU RL.c_str()), WebString::fromUTF8(fileName.c_str()));
167 } 170 }
168 171
169 void registerMockedChromeURLLoad(const std::string& fileName) 172 void registerMockedChromeURLLoad(const std::string& fileName)
170 { 173 {
171 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_chrom eURL.c_str()), WebString::fromUTF8(fileName.c_str())); 174 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_chrom eURL.c_str()), WebString::fromUTF8(fileName.c_str()));
172 } 175 }
173 176
177
178 void registerMockedHttpURLLoadWithCSP(const std::string& fileName, const std ::string& csp, bool reportOnly = false)
179 {
180 WebURLResponse response;
181 response.initialize();
182 response.setMIMEType("text/html");
183 response.addHTTPHeaderField(reportOnly ? WebString("Content-Security-Pol icy-Report-Only") : WebString("Content-Security-Policy"), WebString::fromUTF8(cs p));
184 std::string fullString = m_baseURL + fileName;
185 URLTestHelpers::registerMockedURLLoadWithCustomResponse(toKURL(fullStrin g.c_str()), WebString::fromUTF8(fileName.c_str()), WebString::fromUTF8(""), resp onse);
186 }
187
174 void applyViewportStyleOverride(FrameTestHelpers::WebViewHelper* webViewHelp er) 188 void applyViewportStyleOverride(FrameTestHelpers::WebViewHelper* webViewHelp er)
175 { 189 {
176 RefPtrWillBeRawPtr<StyleSheetContents> styleSheet = StyleSheetContents:: create(CSSParserContext(UASheetMode, 0)); 190 RefPtrWillBeRawPtr<StyleSheetContents> styleSheet = StyleSheetContents:: create(CSSParserContext(UASheetMode, 0));
177 styleSheet->parseString(String(blink::viewportAndroidCss, sizeof(blink:: viewportAndroidCss))); 191 styleSheet->parseString(String(blink::viewportAndroidCss, sizeof(blink:: viewportAndroidCss)));
178 OwnPtrWillBeRawPtr<RuleSet> ruleSet = RuleSet::create(); 192 OwnPtrWillBeRawPtr<RuleSet> ruleSet = RuleSet::create();
179 ruleSet->addRulesFromSheet(styleSheet.get(), MediaQueryEvaluator("screen ")); 193 ruleSet->addRulesFromSheet(styleSheet.get(), MediaQueryEvaluator("screen "));
180 194
181 Document* document = toLocalFrame(webViewHelper->webViewImpl()->page()-> mainFrame())->document(); 195 Document* document = toLocalFrame(webViewHelper->webViewImpl()->page()-> mainFrame())->document();
182 document->ensureStyleResolver().viewportStyleResolver()->collectViewport Rules(ruleSet.get(), ViewportStyleResolver::UserAgentOrigin); 196 document->ensureStyleResolver().viewportStyleResolver()->collectViewport Rules(ruleSet.get(), ViewportStyleResolver::UserAgentOrigin);
183 document->ensureStyleResolver().viewportStyleResolver()->resolve(); 197 document->ensureStyleResolver().viewportStyleResolver()->resolve();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 webViewHelper->initializeAndLoad(m_baseURL + "nodeimage.html"); 230 webViewHelper->initializeAndLoad(m_baseURL + "nodeimage.html");
217 webViewHelper->webView()->resize(WebSize(640, 480)); 231 webViewHelper->webView()->resize(WebSize(640, 480));
218 webViewHelper->webView()->layout(); 232 webViewHelper->webView()->layout();
219 RefPtrWillBeRawPtr<LocalFrame> frame = toLocalFrame(webViewHelper->webVi ewImpl()->page()->mainFrame()); 233 RefPtrWillBeRawPtr<LocalFrame> frame = toLocalFrame(webViewHelper->webVi ewImpl()->page()->mainFrame());
220 ASSERT(frame); 234 ASSERT(frame);
221 Element* element = frame->document()->getElementById(testcase.c_str()); 235 Element* element = frame->document()->getElementById(testcase.c_str());
222 return frame->nodeImage(*element); 236 return frame->nodeImage(*element);
223 } 237 }
224 238
225 std::string m_baseURL; 239 std::string m_baseURL;
240 std::string m_notBaseURL;
226 std::string m_chromeURL; 241 std::string m_chromeURL;
227 }; 242 };
228 243
229 class UseMockScrollbarSettings { 244 class UseMockScrollbarSettings {
230 public: 245 public:
231 UseMockScrollbarSettings() 246 UseMockScrollbarSettings()
232 { 247 {
233 Settings::setMockScrollbarsEnabled(true); 248 Settings::setMockScrollbarsEnabled(true);
234 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(true); 249 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(true);
235 EXPECT_TRUE(ScrollbarTheme::theme()->usesOverlayScrollbars()); 250 EXPECT_TRUE(ScrollbarTheme::theme()->usesOverlayScrollbars());
(...skipping 5972 matching lines...) Expand 10 before | Expand all | Expand 10 after
6208 { 6223 {
6209 registerMockedHttpURLLoad("link-manifest-change.html"); 6224 registerMockedHttpURLLoad("link-manifest-change.html");
6210 6225
6211 ManifestChangeWebFrameClient webFrameClient; 6226 ManifestChangeWebFrameClient webFrameClient;
6212 FrameTestHelpers::WebViewHelper webViewHelper; 6227 FrameTestHelpers::WebViewHelper webViewHelper;
6213 webViewHelper.initializeAndLoad(m_baseURL + "link-manifest-change.html", tru e, &webFrameClient); 6228 webViewHelper.initializeAndLoad(m_baseURL + "link-manifest-change.html", tru e, &webFrameClient);
6214 6229
6215 EXPECT_EQ(14, webFrameClient.manifestChangeCount()); 6230 EXPECT_EQ(14, webFrameClient.manifestChangeCount());
6216 } 6231 }
6217 6232
6233 static ResourcePtr<Resource> fetchManifest(Document* document, const KURL& url)
6234 {
6235 FetchRequest fetchRequest = FetchRequest(ResourceRequest(url), FetchInitiato rInfo());
6236 fetchRequest.mutableResourceRequest().setRequestContext(WebURLRequest::Reque stContextManifest);
6237
6238 return document->fetcher()->fetchSynchronously(fetchRequest);
6239 }
6240
6241 TEST_F(WebFrameTest, ManifestFetch)
6242 {
6243 registerMockedHttpURLLoad("foo.html");
6244 registerMockedHttpURLLoad("link-manifest-fetch.json");
6245
6246 FrameTestHelpers::WebViewHelper webViewHelper;
6247 webViewHelper.initializeAndLoad(m_baseURL + "foo.html");
6248 Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFr ame())->frame()->document();
6249
6250 ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_baseURL + "link-manifest-fetch.json"));
6251
6252 EXPECT_TRUE(resource->isLoaded());
6253 }
6254
6255 TEST_F(WebFrameTest, ManifestCSPFetchAllow)
6256 {
6257 URLTestHelpers::registerMockedURLLoad(toKURL(m_notBaseURL + "link-manifest-f etch.json"), "link-manifest-fetch.json");
6258 registerMockedHttpURLLoadWithCSP("foo.html", "manifest-src *");
6259
6260 FrameTestHelpers::WebViewHelper webViewHelper;
6261 webViewHelper.initializeAndLoad(m_baseURL + "foo.html");
6262 Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFr ame())->frame()->document();
6263
6264 ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json"));
6265
6266 EXPECT_TRUE(resource->isLoaded());
6267 }
6268
6269 TEST_F(WebFrameTest, ManifestCSPFetchSelf)
6270 {
6271 URLTestHelpers::registerMockedURLLoad(toKURL(m_notBaseURL + "link-manifest-f etch.json"), "link-manifest-fetch.json");
6272 registerMockedHttpURLLoadWithCSP("foo.html", "manifest-src 'self'");
6273
6274 FrameTestHelpers::WebViewHelper webViewHelper;
6275 webViewHelper.initializeAndLoad(m_baseURL + "foo.html");
6276 Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFr ame())->frame()->document();
6277
6278 ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json"));
6279
6280 EXPECT_EQ(0, resource.get()); // Fetching resource wasn't allowed.
6281 }
6282
6283 TEST_F(WebFrameTest, ManifestCSPFetchSelfReportOnly)
6284 {
6285 URLTestHelpers::registerMockedURLLoad(toKURL(m_notBaseURL + "link-manifest-f etch.json"), "link-manifest-fetch.json");
6286 registerMockedHttpURLLoadWithCSP("foo.html", "manifest-src 'self'", /* repor t only */ true);
6287
6288 FrameTestHelpers::WebViewHelper webViewHelper;
6289 webViewHelper.initializeAndLoad(m_baseURL + "foo.html");
6290 Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFr ame())->frame()->document();
6291
6292 ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json"));
6293
6294 EXPECT_TRUE(resource->isLoaded());
6295 }
6296
6297
6218 TEST_F(WebFrameTest, ReloadBypassingCache) 6298 TEST_F(WebFrameTest, ReloadBypassingCache)
6219 { 6299 {
6220 // Check that a reload ignoring cache on a frame will result in the cache 6300 // Check that a reload ignoring cache on a frame will result in the cache
6221 // policy of the request being set to ReloadBypassingCache. 6301 // policy of the request being set to ReloadBypassingCache.
6222 registerMockedHttpURLLoad("foo.html"); 6302 registerMockedHttpURLLoad("foo.html");
6223 FrameTestHelpers::WebViewHelper webViewHelper; 6303 FrameTestHelpers::WebViewHelper webViewHelper;
6224 webViewHelper.initializeAndLoad(m_baseURL + "foo.html", true); 6304 webViewHelper.initializeAndLoad(m_baseURL + "foo.html", true);
6225 WebFrame* frame = webViewHelper.webView()->mainFrame(); 6305 WebFrame* frame = webViewHelper.webView()->mainFrame();
6226 FrameTestHelpers::reloadFrameIgnoringCache(frame); 6306 FrameTestHelpers::reloadFrameIgnoringCache(frame);
6227 EXPECT_EQ(WebURLRequest::ReloadBypassingCache, frame->dataSource()->request( ).cachePolicy()); 6307 EXPECT_EQ(WebURLRequest::ReloadBypassingCache, frame->dataSource()->request( ).cachePolicy());
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
6629 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount()); 6709 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount());
6630 6710
6631 // Neither should a page reload. 6711 // Neither should a page reload.
6632 localFrame->reload(); 6712 localFrame->reload();
6633 EXPECT_EQ(4u, frameClient.provisionalLoadCount()); 6713 EXPECT_EQ(4u, frameClient.provisionalLoadCount());
6634 EXPECT_FALSE(frameClient.wasLastProvisionalLoadATransition()); 6714 EXPECT_FALSE(frameClient.wasLastProvisionalLoadATransition());
6635 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount()); 6715 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount());
6636 } 6716 }
6637 6717
6638 } // namespace 6718 } // namespace
OLDNEW
« no previous file with comments | « Source/web/AssociatedURLLoader.cpp ('k') | Source/web/tests/data/link-manifest-fetch.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698