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

Side by Side Diff: third_party/WebKit/Source/core/html/parser/CSSPreloadScannerTest.cpp

Issue 1976463003: Preload scan external CSS for @import (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: preload @import Created 4 years, 4 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 2016 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 "core/html/parser/CSSPreloadScanner.h"
6
7 #include "core/fetch/FetchContext.h"
8 #include "core/fetch/Resource.h"
9 #include "core/fetch/ResourceFetcher.h"
10 #include "core/frame/Settings.h"
11 #include "core/html/parser/HTMLResourcePreloader.h"
12 #include "core/testing/DummyPageHolder.h"
13 #include "platform/heap/Heap.h"
14 #include "platform/network/ResourceRequest.h"
15 #include "platform/weborigin/KURL.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 #include <memory>
18
19 namespace blink {
20
21 class PreloadSuppressingCSSPreloaderResourceClient : public CSSPreloaderResource Client {
hiroshige 2016/07/26 09:57:10 Add |final|.
Charlie Harrison 2016/07/26 16:31:52 Done.
22 public:
23 PreloadSuppressingCSSPreloaderResourceClient(Resource* resource, HTMLResourc ePreloader* preloader)
24 : CSSPreloaderResourceClient(resource, preloader) {}
25 void fetchPreloads(PreloadRequestStream& preloads) override
26 {
27 PreloadRequestStream movedPreloads;
28 movedPreloads.swap(preloads);
29 for (PreloadRequestStream::iterator it = movedPreloads.begin(); it != mo vedPreloads.end(); ++it) {
30 m_preloads.append(std::move(*it));
31 }
32 }
33
34 PreloadRequestStream m_preloads;
35 };
36
37 class CSSPreloadScannerTest : public ::testing::Test {
38 };
39
40 TEST_F(CSSPreloadScannerTest, ScanFromResourceClient)
41 {
42 std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(I ntSize(500, 500));
43 dummyPageHolder->document().settings()->setCSSExternalScannerNoPreload(true) ;
44
45 HTMLResourcePreloader* preloader = HTMLResourcePreloader::create(dummyPageHo lder->document());
46
47 KURL url(ParsedURLString, "http://127.0.0.1/foo.css");
48 CSSStyleSheetResource* resource = CSSStyleSheetResource::createForTest(Resou rceRequest(url), "utf-8");
49 resource->setStatus(Resource::Pending);
50
51 PreloadSuppressingCSSPreloaderResourceClient* resourceClient = new PreloadSu ppressingCSSPreloaderResourceClient(resource, preloader);
52
53 const char* data = "@import url('http://127.0.0.1/preload.css');";
54 resource->appendData(data, strlen(data));
55
56 EXPECT_EQ(1u, resourceClient->m_preloads.size());
57 EXPECT_EQ("http://127.0.0.1/preload.css", resourceClient->m_preloads.first() ->resourceURL());
58 }
59
60 // Regression test for crbug.com/608310 where the client is destroyed but was
61 // not removed from the resource's client list.
62 TEST_F(CSSPreloadScannerTest, DestroyClientBeforeDataSent)
63 {
64 std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(I ntSize(500, 500));
65 dummyPageHolder->document().settings()->setCSSExternalScannerNoPreload(true) ;
66
67 Persistent<HTMLResourcePreloader> preloader = HTMLResourcePreloader::create( dummyPageHolder->document());
68
69 KURL url(ParsedURLString, "http://127.0.0.1/foo.css");
70 Persistent<CSSStyleSheetResource> resource = CSSStyleSheetResource::createFo rTest(ResourceRequest(url), "utf-8");
71 resource->setStatus(Resource::Pending);
72
73 new PreloadSuppressingCSSPreloaderResourceClient(resource, preloader);
74
75 // Destroys the resourceClient.
76 ThreadHeap::collectAllGarbage();
77
78 const char* data = "@import url('http://127.0.0.1/preload.css');";
79 // Should not crash.
80 resource->appendData(data, strlen(data));
81 }
82
83 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698