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

Side by Side Diff: third_party/WebKit/Source/core/dom/ClassicPendingScriptTest.cpp

Issue 2653923008: Reland of Split PendingScript into PendingScript and ClassicPendingScript (Closed)
Patch Set: Crash fix by adding Dispose() as ClassicPendingScript prefinalizer Created 3 years, 8 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 2017 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/dom/ClassicPendingScript.h"
6
7 #include "core/dom/MockScriptElementBase.h"
8 #include "core/loader/resource/ScriptResource.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace blink {
13
14 namespace {
15
16 class MockScriptStreamer : public ScriptStreamer {
17 public:
18 static MockScriptStreamer* Create(ScriptResource* resource) {
19 return new testing::StrictMock<MockScriptStreamer>(resource);
20 }
21 MockScriptStreamer(ScriptResource* resource) : resource_(resource) {}
22
23 ~MockScriptStreamer() override {}
24
25 DEFINE_INLINE_VIRTUAL_TRACE() {
26 visitor->Trace(resource_);
27 ScriptStreamer::Trace(visitor);
28 }
29
30 ScriptResource* GetResource() const { return resource_; }
31 MOCK_CONST_METHOD0(IsFinished, bool());
32 MOCK_CONST_METHOD0(StreamingSuppressed, bool());
33
34 MOCK_METHOD1(NotifyAppendData, void(ScriptResource*));
35 MOCK_METHOD1(NotifyFinished, void(Resource*));
36 MOCK_METHOD0(Source, v8::ScriptCompiler::StreamedSource*());
37 MOCK_METHOD0(Cancel, void());
38
39 private:
40 Member<ScriptResource> resource_;
41 };
42
43 class MockPendingScriptClient
44 : public GarbageCollectedFinalized<MockPendingScriptClient>,
45 public PendingScriptClient {
46 USING_GARBAGE_COLLECTED_MIXIN(MockPendingScriptClient);
47
48 public:
49 static MockPendingScriptClient* Create() {
50 return new testing::StrictMock<MockPendingScriptClient>();
51 }
52
53 virtual ~MockPendingScriptClient() {}
54 MOCK_METHOD1(PendingScriptFinished, void(PendingScript*));
55
56 DEFINE_INLINE_VIRTUAL_TRACE() { PendingScriptClient::Trace(visitor); }
57 };
58
59 // A test for crbug.com/711703. Should not crash.
60 TEST(ClassicPendingScript, Prefinalizer) {
hiroshige 2017/04/19 01:01:40 I added this unit test (this crashes with Patch Se
61 ScriptResource* resource = ScriptResource::Create(
62 ResourceRequest("http://example.com/test.js"), "UTF-8");
63 ClassicPendingScript* pending_script =
64 ClassicPendingScript::Create(MockScriptElementBase::Create(), resource);
65
66 MockScriptStreamer* mock_script_streamer =
67 MockScriptStreamer::Create(resource);
68 pending_script->SetStreamer(mock_script_streamer);
69
70 EXPECT_CALL(*mock_script_streamer, Cancel());
71
72 Persistent<MockPendingScriptClient> mock_client =
73 MockPendingScriptClient::Create();
74 ASSERT_FALSE(pending_script->IsReady());
75 pending_script->WatchForLoad(mock_client);
76
77 ThreadState::Current()->CollectGarbage(BlinkGC::kNoHeapPointersOnStack,
78 BlinkGC::kGCWithSweep,
79 BlinkGC::kForcedGC);
80 }
81
82 } // namespace
83
84 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698