| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 #include "bindings/core/v8/ScriptStreamer.h" | 6 #include "bindings/core/v8/ScriptStreamer.h" |
| 7 | 7 |
| 8 #include "bindings/core/v8/ScriptSourceCode.h" | 8 #include "bindings/core/v8/ScriptSourceCode.h" |
| 9 #include "bindings/core/v8/ScriptStreamerThread.h" | 9 #include "bindings/core/v8/ScriptStreamerThread.h" |
| 10 #include "bindings/core/v8/V8Binding.h" | 10 #include "bindings/core/v8/V8Binding.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 class ScriptStreamingTest : public ::testing::Test { | 28 class ScriptStreamingTest : public ::testing::Test { |
| 29 public: | 29 public: |
| 30 ScriptStreamingTest() | 30 ScriptStreamingTest() |
| 31 : m_loadingTaskRunner(Platform::current()->currentThread()->scheduler()-
>loadingTaskRunner()) | 31 : m_loadingTaskRunner(Platform::current()->currentThread()->scheduler()-
>loadingTaskRunner()) |
| 32 , m_scope(v8::Isolate::GetCurrent()) | 32 , m_scope(v8::Isolate::GetCurrent()) |
| 33 , m_settings(Settings::create()) | 33 , m_settings(Settings::create()) |
| 34 , m_resourceRequest("http://www.streaming-test.com/") | 34 , m_resourceRequest("http://www.streaming-test.com/") |
| 35 , m_resource(new ScriptResource(m_resourceRequest, "UTF-8")) | 35 , m_resource(ScriptResource::create(m_resourceRequest, "UTF-8")) |
| 36 , m_pendingScript(PendingScript::create(0, m_resource.get())) | 36 , m_pendingScript(PendingScript::create(0, m_resource.get())) |
| 37 { | 37 { |
| 38 m_resource->setLoading(true); | 38 m_resource->setLoading(true); |
| 39 m_pendingScript = PendingScript::create(0, m_resource.get()); | 39 m_pendingScript = PendingScript::create(0, m_resource.get()); |
| 40 ScriptStreamer::setSmallScriptThresholdForTesting(0); | 40 ScriptStreamer::setSmallScriptThresholdForTesting(0); |
| 41 } | 41 } |
| 42 | 42 |
| 43 ScriptState* scriptState() const { return m_scope.scriptState(); } | 43 ScriptState* scriptState() const { return m_scope.scriptState(); } |
| 44 v8::Isolate* isolate() const { return m_scope.isolate(); } | 44 v8::Isolate* isolate() const { return m_scope.isolate(); } |
| 45 | 45 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 testing::runPendingTasks(); | 82 testing::runPendingTasks(); |
| 83 } | 83 } |
| 84 | 84 |
| 85 WebTaskRunner* m_loadingTaskRunner; // NOT OWNED | 85 WebTaskRunner* m_loadingTaskRunner; // NOT OWNED |
| 86 V8TestingScope m_scope; | 86 V8TestingScope m_scope; |
| 87 OwnPtr<Settings> m_settings; | 87 OwnPtr<Settings> m_settings; |
| 88 // The Resource and PendingScript where we stream from. These don't really | 88 // The Resource and PendingScript where we stream from. These don't really |
| 89 // fetch any data outside the test; the test controls the data by calling | 89 // fetch any data outside the test; the test controls the data by calling |
| 90 // ScriptResource::appendData. | 90 // ScriptResource::appendData. |
| 91 ResourceRequest m_resourceRequest; | 91 ResourceRequest m_resourceRequest; |
| 92 ResourcePtr<ScriptResource> m_resource; | 92 RefPtrWillBePersistent<ScriptResource> m_resource; |
| 93 OwnPtrWillBePersistent<PendingScript> m_pendingScript; | 93 OwnPtrWillBePersistent<PendingScript> m_pendingScript; |
| 94 }; | 94 }; |
| 95 | 95 |
| 96 class TestScriptResourceClient : public ScriptResourceClient { | 96 class TestScriptResourceClient : public ScriptResourceClient { |
| 97 public: | 97 public: |
| 98 TestScriptResourceClient() | 98 TestScriptResourceClient() |
| 99 : m_finished(false) { } | 99 : m_finished(false) { } |
| 100 | 100 |
| 101 void notifyFinished(Resource*) override { m_finished = true; } | 101 void notifyFinished(Resource*) override { m_finished = true; } |
| 102 String debugName() const override { return "TestScriptResourceClient"; } | 102 String debugName() const override { return "TestScriptResourceClient"; } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 pendingScript()->watchForLoad(&client); | 184 pendingScript()->watchForLoad(&client); |
| 185 appendData("function foo() {"); | 185 appendData("function foo() {"); |
| 186 | 186 |
| 187 // In general, we cannot control what the background thread is doing | 187 // In general, we cannot control what the background thread is doing |
| 188 // (whether it's parsing or waiting for more data). In this test, we have | 188 // (whether it's parsing or waiting for more data). In this test, we have |
| 189 // given it so little data that it's surely waiting for more. | 189 // given it so little data that it's surely waiting for more. |
| 190 | 190 |
| 191 // Simulate cancelling the network load (e.g., because the user navigated | 191 // Simulate cancelling the network load (e.g., because the user navigated |
| 192 // away). | 192 // away). |
| 193 EXPECT_FALSE(client.finished()); | 193 EXPECT_FALSE(client.finished()); |
| 194 pendingScript()->stopWatchingForLoad(&client); | 194 pendingScript()->stopWatchingForLoad(); |
| 195 pendingScript()->releaseElementAndClear(); | 195 pendingScript()->releaseElementAndClear(); |
| 196 m_pendingScript = nullptr; // This will destroy m_resource. | 196 m_pendingScript = nullptr; // This will destroy m_resource. |
| 197 m_resource = 0; | 197 m_resource = nullptr; |
| 198 | 198 |
| 199 // The V8 side will complete too. This should not crash. We don't receive | 199 // The V8 side will complete too. This should not crash. We don't receive |
| 200 // any results from the streaming and the client doesn't get notified. | 200 // any results from the streaming and the client doesn't get notified. |
| 201 processTasksUntilStreamingComplete(); | 201 processTasksUntilStreamingComplete(); |
| 202 EXPECT_FALSE(client.finished()); | 202 EXPECT_FALSE(client.finished()); |
| 203 } | 203 } |
| 204 | 204 |
| 205 TEST_F(ScriptStreamingTest, SuppressingStreaming) | 205 TEST_F(ScriptStreamingTest, SuppressingStreaming) |
| 206 { | 206 { |
| 207 // If we notice during streaming that there is a code cache, streaming | 207 // If we notice during streaming that there is a code cache, streaming |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 EXPECT_TRUE(sourceCode.streamer()); | 376 EXPECT_TRUE(sourceCode.streamer()); |
| 377 v8::TryCatch tryCatch(isolate()); | 377 v8::TryCatch tryCatch(isolate()); |
| 378 v8::Local<v8::Script> script; | 378 v8::Local<v8::Script> script; |
| 379 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc
ript)); | 379 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc
ript)); |
| 380 EXPECT_FALSE(tryCatch.HasCaught()); | 380 EXPECT_FALSE(tryCatch.HasCaught()); |
| 381 } | 381 } |
| 382 | 382 |
| 383 } // namespace | 383 } // namespace |
| 384 | 384 |
| 385 } // namespace blink | 385 } // namespace blink |
| OLD | NEW |