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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp

Issue 1569273004: Move ResourceOwner on to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: win_chromium_compile_dbg_ng is the worst Created 4 years, 11 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
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"
11 #include "bindings/core/v8/V8BindingForTesting.h" 11 #include "bindings/core/v8/V8BindingForTesting.h"
12 #include "bindings/core/v8/V8ScriptRunner.h" 12 #include "bindings/core/v8/V8ScriptRunner.h"
13 #include "core/dom/Element.h" 13 #include "core/dom/Element.h"
14 #include "core/dom/PendingScript.h" 14 #include "core/dom/PendingScript.h"
15 #include "core/frame/Settings.h" 15 #include "core/frame/Settings.h"
16 #include "platform/Task.h" 16 #include "platform/Task.h"
17 #include "platform/heap/Handle.h" 17 #include "platform/heap/Handle.h"
18 #include "platform/testing/UnitTestHelpers.h" 18 #include "platform/testing/UnitTestHelpers.h"
19 #include "public/platform/Platform.h" 19 #include "public/platform/Platform.h"
20 #include "public/platform/WebScheduler.h" 20 #include "public/platform/WebScheduler.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 #include <v8.h> 22 #include <v8.h>
23 23
24 namespace blink { 24 namespace blink {
25 25
26 namespace { 26 namespace {
27 27
28 // For the benefit of Oilpan, put the part object PendingScript inside
29 // a wrapper that's on the Oilpan heap and hold a reference to that wrapper
30 // from ScriptStreamingTest.
31 class PendingScriptWrapper : public NoBaseWillBeGarbageCollectedFinalized<Pendin gScriptWrapper> {
32 public:
33 static PassOwnPtrWillBeRawPtr<PendingScriptWrapper> create()
34 {
35 return adoptPtrWillBeNoop(new PendingScriptWrapper());
36 }
37
38 static PassOwnPtrWillBeRawPtr<PendingScriptWrapper> create(Element* element, ScriptResource* resource)
39 {
40 return adoptPtrWillBeNoop(new PendingScriptWrapper(element, resource));
41 }
42
43 PendingScript& get() { return m_pendingScript; }
44
45 DEFINE_INLINE_TRACE()
46 {
47 visitor->trace(m_pendingScript);
48 }
49
50 private:
51 PendingScriptWrapper()
52 {
53 }
54
55 PendingScriptWrapper(Element* element, ScriptResource* resource)
56 : m_pendingScript(PendingScript(element, resource))
57 {
58 }
59
60 PendingScript m_pendingScript;
61 };
62
63 class ScriptStreamingTest : public ::testing::Test { 28 class ScriptStreamingTest : public ::testing::Test {
64 public: 29 public:
65 ScriptStreamingTest() 30 ScriptStreamingTest()
66 : m_loadingTaskRunner(Platform::current()->currentThread()->scheduler()- >loadingTaskRunner()) 31 : m_loadingTaskRunner(Platform::current()->currentThread()->scheduler()- >loadingTaskRunner())
67 , m_scope(v8::Isolate::GetCurrent()) 32 , m_scope(v8::Isolate::GetCurrent())
68 , m_settings(Settings::create()) 33 , m_settings(Settings::create())
69 , m_resourceRequest("http://www.streaming-test.com/") 34 , m_resourceRequest("http://www.streaming-test.com/")
70 , m_resource(new ScriptResource(m_resourceRequest, "UTF-8")) 35 , m_resource(new ScriptResource(m_resourceRequest, "UTF-8"))
71 , m_pendingScript(PendingScriptWrapper::create(0, m_resource.get())) 36 , m_pendingScript(PendingScript::create(0, m_resource.get()))
72 { 37 {
73 m_resource->setLoading(true); 38 m_resource->setLoading(true);
74 m_pendingScript = PendingScriptWrapper::create(0, m_resource.get()); 39 m_pendingScript = PendingScript::create(0, m_resource.get());
75 ScriptStreamer::setSmallScriptThresholdForTesting(0); 40 ScriptStreamer::setSmallScriptThresholdForTesting(0);
76 } 41 }
77 42
78 ScriptState* scriptState() const { return m_scope.scriptState(); } 43 ScriptState* scriptState() const { return m_scope.scriptState(); }
79 v8::Isolate* isolate() const { return m_scope.isolate(); } 44 v8::Isolate* isolate() const { return m_scope.isolate(); }
80 45
81 PendingScript& pendingScript() const { return m_pendingScript->get(); } 46 PendingScript* pendingScript() const { return m_pendingScript.get(); }
82 47
83 protected: 48 protected:
84 void appendData(const char* data) 49 void appendData(const char* data)
85 { 50 {
86 m_resource->appendData(data, strlen(data)); 51 m_resource->appendData(data, strlen(data));
87 // Yield control to the background thread, so that V8 gets a chance to 52 // Yield control to the background thread, so that V8 gets a chance to
88 // process the data before the main thread adds more. Note that we 53 // process the data before the main thread adds more. Note that we
89 // cannot fully control in what kind of chunks the data is passed to V8 54 // cannot fully control in what kind of chunks the data is passed to V8
90 // (if V8 is not requesting more data between two appendData calls, it 55 // (if V8 is not requesting more data between two appendData calls, it
91 // will get both chunks together). 56 // will get both chunks together).
(...skipping 26 matching lines...) Expand all
118 } 83 }
119 84
120 WebTaskRunner* m_loadingTaskRunner; // NOT OWNED 85 WebTaskRunner* m_loadingTaskRunner; // NOT OWNED
121 V8TestingScope m_scope; 86 V8TestingScope m_scope;
122 OwnPtr<Settings> m_settings; 87 OwnPtr<Settings> m_settings;
123 // 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
124 // 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
125 // ScriptResource::appendData. 90 // ScriptResource::appendData.
126 ResourceRequest m_resourceRequest; 91 ResourceRequest m_resourceRequest;
127 ResourcePtr<ScriptResource> m_resource; 92 ResourcePtr<ScriptResource> m_resource;
128 OwnPtrWillBePersistent<PendingScriptWrapper> m_pendingScript; 93 OwnPtrWillBePersistent<PendingScript> m_pendingScript;
129 }; 94 };
130 95
131 class TestScriptResourceClient : public ScriptResourceClient { 96 class TestScriptResourceClient : public ScriptResourceClient {
132 public: 97 public:
133 TestScriptResourceClient() 98 TestScriptResourceClient()
134 : m_finished(false) { } 99 : m_finished(false) { }
135 100
136 void notifyFinished(Resource*) override { m_finished = true; } 101 void notifyFinished(Resource*) override { m_finished = true; }
137 String debugName() const override { return "TestScriptResourceClient"; } 102 String debugName() const override { return "TestScriptResourceClient"; }
138 103
139 bool finished() const { return m_finished; } 104 bool finished() const { return m_finished; }
140 105
141 private: 106 private:
142 bool m_finished; 107 bool m_finished;
143 }; 108 };
144 109
145 #if OS(MACOSX) && defined(ADDRESS_SANITIZER) 110 #if OS(MACOSX) && defined(ADDRESS_SANITIZER)
146 // TODO(marja): Fix this test, http://crbug.com/572987 111 // TODO(marja): Fix this test, http://crbug.com/572987
147 #define MAYBE_CompilingStreamedScript DISABLED_CompilingStreamedScript 112 #define MAYBE_CompilingStreamedScript DISABLED_CompilingStreamedScript
148 #else 113 #else
149 #define MAYBE_CompilingStreamedScript CompilingStreamedScript 114 #define MAYBE_CompilingStreamedScript CompilingStreamedScript
150 #endif 115 #endif
151 TEST_F(ScriptStreamingTest, MAYBE_CompilingStreamedScript) 116 TEST_F(ScriptStreamingTest, MAYBE_CompilingStreamedScript)
152 { 117 {
153 // Test that we can successfully compile a streamed script. 118 // Test that we can successfully compile a streamed script.
154 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 119 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
155 TestScriptResourceClient client; 120 TestScriptResourceClient client;
156 pendingScript().watchForLoad(&client); 121 pendingScript()->watchForLoad(&client);
157 122
158 appendData("function foo() {"); 123 appendData("function foo() {");
159 appendPadding(); 124 appendPadding();
160 appendData("return 5; }"); 125 appendData("return 5; }");
161 appendPadding(); 126 appendPadding();
162 appendData("foo();"); 127 appendData("foo();");
163 EXPECT_FALSE(client.finished()); 128 EXPECT_FALSE(client.finished());
164 finish(); 129 finish();
165 130
166 // Process tasks on the main thread until the streaming background thread 131 // Process tasks on the main thread until the streaming background thread
167 // has completed its tasks. 132 // has completed its tasks.
168 processTasksUntilStreamingComplete(); 133 processTasksUntilStreamingComplete();
169 EXPECT_TRUE(client.finished()); 134 EXPECT_TRUE(client.finished());
170 bool errorOccurred = false; 135 bool errorOccurred = false;
171 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 136 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
172 EXPECT_FALSE(errorOccurred); 137 EXPECT_FALSE(errorOccurred);
173 EXPECT_TRUE(sourceCode.streamer()); 138 EXPECT_TRUE(sourceCode.streamer());
174 v8::TryCatch tryCatch(isolate()); 139 v8::TryCatch tryCatch(isolate());
175 v8::Local<v8::Script> script; 140 v8::Local<v8::Script> script;
176 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript)); 141 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript));
177 EXPECT_FALSE(tryCatch.HasCaught()); 142 EXPECT_FALSE(tryCatch.HasCaught());
178 } 143 }
179 144
180 TEST_F(ScriptStreamingTest, CompilingStreamedScriptWithParseError) 145 TEST_F(ScriptStreamingTest, CompilingStreamedScriptWithParseError)
181 { 146 {
182 // Test that scripts with parse errors are handled properly. In those cases, 147 // Test that scripts with parse errors are handled properly. In those cases,
183 // the V8 side typically finished before loading finishes: make sure we 148 // the V8 side typically finished before loading finishes: make sure we
184 // handle it gracefully. 149 // handle it gracefully.
185 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 150 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
186 TestScriptResourceClient client; 151 TestScriptResourceClient client;
187 pendingScript().watchForLoad(&client); 152 pendingScript()->watchForLoad(&client);
188 appendData("function foo() {"); 153 appendData("function foo() {");
189 appendData("this is the part which will be a parse error"); 154 appendData("this is the part which will be a parse error");
190 // V8 won't realize the parse error until it actually starts parsing the 155 // V8 won't realize the parse error until it actually starts parsing the
191 // script, and this happens only when its buffer is filled. 156 // script, and this happens only when its buffer is filled.
192 appendPadding(); 157 appendPadding();
193 158
194 EXPECT_FALSE(client.finished()); 159 EXPECT_FALSE(client.finished());
195 160
196 // Force the V8 side to finish before the loading. 161 // Force the V8 side to finish before the loading.
197 processTasksUntilStreamingComplete(); 162 processTasksUntilStreamingComplete();
198 EXPECT_FALSE(client.finished()); 163 EXPECT_FALSE(client.finished());
199 164
200 finish(); 165 finish();
201 EXPECT_TRUE(client.finished()); 166 EXPECT_TRUE(client.finished());
202 167
203 bool errorOccurred = false; 168 bool errorOccurred = false;
204 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 169 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
205 EXPECT_FALSE(errorOccurred); 170 EXPECT_FALSE(errorOccurred);
206 EXPECT_TRUE(sourceCode.streamer()); 171 EXPECT_TRUE(sourceCode.streamer());
207 v8::TryCatch tryCatch(isolate()); 172 v8::TryCatch tryCatch(isolate());
208 v8::Local<v8::Script> script; 173 v8::Local<v8::Script> script;
209 EXPECT_FALSE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&s cript)); 174 EXPECT_FALSE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&s cript));
210 EXPECT_TRUE(tryCatch.HasCaught()); 175 EXPECT_TRUE(tryCatch.HasCaught());
211 } 176 }
212 177
213 TEST_F(ScriptStreamingTest, CancellingStreaming) 178 TEST_F(ScriptStreamingTest, CancellingStreaming)
214 { 179 {
215 // Test that the upper layers (PendingScript and up) can be ramped down 180 // Test that the upper layers (PendingScript and up) can be ramped down
216 // while streaming is ongoing, and ScriptStreamer handles it gracefully. 181 // while streaming is ongoing, and ScriptStreamer handles it gracefully.
217 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 182 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
218 TestScriptResourceClient client; 183 TestScriptResourceClient client;
219 pendingScript().watchForLoad(&client); 184 pendingScript()->watchForLoad(&client);
220 appendData("function foo() {"); 185 appendData("function foo() {");
221 186
222 // In general, we cannot control what the background thread is doing 187 // In general, we cannot control what the background thread is doing
223 // (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
224 // 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.
225 190
226 // Simulate cancelling the network load (e.g., because the user navigated 191 // Simulate cancelling the network load (e.g., because the user navigated
227 // away). 192 // away).
228 EXPECT_FALSE(client.finished()); 193 EXPECT_FALSE(client.finished());
229 pendingScript().stopWatchingForLoad(&client); 194 pendingScript()->stopWatchingForLoad(&client);
230 pendingScript().releaseElementAndClear(); 195 pendingScript()->releaseElementAndClear();
231 m_pendingScript = PendingScriptWrapper::create(); // This will destroy m_res ource. 196 m_pendingScript = nullptr; // This will destroy m_resource.
232 m_resource = 0; 197 m_resource = 0;
233 198
234 // 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
235 // 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.
236 processTasksUntilStreamingComplete(); 201 processTasksUntilStreamingComplete();
237 EXPECT_FALSE(client.finished()); 202 EXPECT_FALSE(client.finished());
238 } 203 }
239 204
240 TEST_F(ScriptStreamingTest, SuppressingStreaming) 205 TEST_F(ScriptStreamingTest, SuppressingStreaming)
241 { 206 {
242 // 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
243 // is suppressed (V8 doesn't parse while the script is loading), and the 208 // is suppressed (V8 doesn't parse while the script is loading), and the
244 // upper layer (ScriptResourceClient) should get a notification when the 209 // upper layer (ScriptResourceClient) should get a notification when the
245 // script is loaded. 210 // script is loaded.
246 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 211 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
247 TestScriptResourceClient client; 212 TestScriptResourceClient client;
248 pendingScript().watchForLoad(&client); 213 pendingScript()->watchForLoad(&client);
249 appendData("function foo() {"); 214 appendData("function foo() {");
250 appendPadding(); 215 appendPadding();
251 216
252 CachedMetadataHandler* cacheHandler = m_resource->cacheHandler(); 217 CachedMetadataHandler* cacheHandler = m_resource->cacheHandler();
253 EXPECT_TRUE(cacheHandler); 218 EXPECT_TRUE(cacheHandler);
254 cacheHandler->setCachedMetadata(V8ScriptRunner::tagForCodeCache(cacheHandler ), "X", 1, CachedMetadataHandler::CacheLocally); 219 cacheHandler->setCachedMetadata(V8ScriptRunner::tagForCodeCache(cacheHandler ), "X", 1, CachedMetadataHandler::CacheLocally);
255 220
256 appendPadding(); 221 appendPadding();
257 finish(); 222 finish();
258 processTasksUntilStreamingComplete(); 223 processTasksUntilStreamingComplete();
259 EXPECT_TRUE(client.finished()); 224 EXPECT_TRUE(client.finished());
260 225
261 bool errorOccurred = false; 226 bool errorOccurred = false;
262 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 227 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
263 EXPECT_FALSE(errorOccurred); 228 EXPECT_FALSE(errorOccurred);
264 // ScriptSourceCode doesn't refer to the streamer, since we have suppressed 229 // ScriptSourceCode doesn't refer to the streamer, since we have suppressed
265 // the streaming and resumed the non-streaming code path for script 230 // the streaming and resumed the non-streaming code path for script
266 // compilation. 231 // compilation.
267 EXPECT_FALSE(sourceCode.streamer()); 232 EXPECT_FALSE(sourceCode.streamer());
268 } 233 }
269 234
270 TEST_F(ScriptStreamingTest, EmptyScripts) 235 TEST_F(ScriptStreamingTest, EmptyScripts)
271 { 236 {
272 // Empty scripts should also be streamed properly, that is, the upper layer 237 // Empty scripts should also be streamed properly, that is, the upper layer
273 // (ScriptResourceClient) should be notified when an empty script has been 238 // (ScriptResourceClient) should be notified when an empty script has been
274 // loaded. 239 // loaded.
275 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 240 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
276 TestScriptResourceClient client; 241 TestScriptResourceClient client;
277 pendingScript().watchForLoad(&client); 242 pendingScript()->watchForLoad(&client);
278 243
279 // Finish the script without sending any data. 244 // Finish the script without sending any data.
280 finish(); 245 finish();
281 // The finished notification should arrive immediately and not be cycled 246 // The finished notification should arrive immediately and not be cycled
282 // through a background thread. 247 // through a background thread.
283 EXPECT_TRUE(client.finished()); 248 EXPECT_TRUE(client.finished());
284 249
285 bool errorOccurred = false; 250 bool errorOccurred = false;
286 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 251 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
287 EXPECT_FALSE(errorOccurred); 252 EXPECT_FALSE(errorOccurred);
288 EXPECT_FALSE(sourceCode.streamer()); 253 EXPECT_FALSE(sourceCode.streamer());
289 } 254 }
290 255
291 TEST_F(ScriptStreamingTest, SmallScripts) 256 TEST_F(ScriptStreamingTest, SmallScripts)
292 { 257 {
293 // Small scripts shouldn't be streamed. 258 // Small scripts shouldn't be streamed.
294 ScriptStreamer::setSmallScriptThresholdForTesting(100); 259 ScriptStreamer::setSmallScriptThresholdForTesting(100);
295 260
296 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 261 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
297 TestScriptResourceClient client; 262 TestScriptResourceClient client;
298 pendingScript().watchForLoad(&client); 263 pendingScript()->watchForLoad(&client);
299 264
300 appendData("function foo() { }"); 265 appendData("function foo() { }");
301 266
302 finish(); 267 finish();
303 268
304 // The finished notification should arrive immediately and not be cycled 269 // The finished notification should arrive immediately and not be cycled
305 // through a background thread. 270 // through a background thread.
306 EXPECT_TRUE(client.finished()); 271 EXPECT_TRUE(client.finished());
307 272
308 bool errorOccurred = false; 273 bool errorOccurred = false;
309 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 274 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
310 EXPECT_FALSE(errorOccurred); 275 EXPECT_FALSE(errorOccurred);
311 EXPECT_FALSE(sourceCode.streamer()); 276 EXPECT_FALSE(sourceCode.streamer());
312 } 277 }
313 278
314 #if OS(MACOSX) && defined(ADDRESS_SANITIZER) 279 #if OS(MACOSX) && defined(ADDRESS_SANITIZER)
315 // TODO(marja): Fix this test, http://crbug.com/572987 280 // TODO(marja): Fix this test, http://crbug.com/572987
316 #define MAYBE_ScriptsWithSmallFirstChunk DISABLED_ScriptsWithSmallFirstChunk 281 #define MAYBE_ScriptsWithSmallFirstChunk DISABLED_ScriptsWithSmallFirstChunk
317 #else 282 #else
318 #define MAYBE_ScriptsWithSmallFirstChunk ScriptsWithSmallFirstChunk 283 #define MAYBE_ScriptsWithSmallFirstChunk ScriptsWithSmallFirstChunk
319 #endif 284 #endif
320 TEST_F(ScriptStreamingTest, MAYBE_ScriptsWithSmallFirstChunk) 285 TEST_F(ScriptStreamingTest, MAYBE_ScriptsWithSmallFirstChunk)
321 { 286 {
322 // If a script is long enough, if should be streamed, even if the first data 287 // If a script is long enough, if should be streamed, even if the first data
323 // chunk is small. 288 // chunk is small.
324 ScriptStreamer::setSmallScriptThresholdForTesting(100); 289 ScriptStreamer::setSmallScriptThresholdForTesting(100);
325 290
326 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 291 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
327 TestScriptResourceClient client; 292 TestScriptResourceClient client;
328 pendingScript().watchForLoad(&client); 293 pendingScript()->watchForLoad(&client);
329 294
330 // This is the first data chunk which is small. 295 // This is the first data chunk which is small.
331 appendData("function foo() { }"); 296 appendData("function foo() { }");
332 appendPadding(); 297 appendPadding();
333 appendPadding(); 298 appendPadding();
334 appendPadding(); 299 appendPadding();
335 300
336 finish(); 301 finish();
337 302
338 processTasksUntilStreamingComplete(); 303 processTasksUntilStreamingComplete();
339 EXPECT_TRUE(client.finished()); 304 EXPECT_TRUE(client.finished());
340 bool errorOccurred = false; 305 bool errorOccurred = false;
341 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 306 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
342 EXPECT_FALSE(errorOccurred); 307 EXPECT_FALSE(errorOccurred);
343 EXPECT_TRUE(sourceCode.streamer()); 308 EXPECT_TRUE(sourceCode.streamer());
344 v8::TryCatch tryCatch(isolate()); 309 v8::TryCatch tryCatch(isolate());
345 v8::Local<v8::Script> script; 310 v8::Local<v8::Script> script;
346 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript)); 311 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript));
347 EXPECT_FALSE(tryCatch.HasCaught()); 312 EXPECT_FALSE(tryCatch.HasCaught());
348 } 313 }
349 314
350 #if OS(MACOSX) && defined(ADDRESS_SANITIZER) 315 #if OS(MACOSX) && defined(ADDRESS_SANITIZER)
351 // TODO(marja): Fix this test, http://crbug.com/572987 316 // TODO(marja): Fix this test, http://crbug.com/572987
352 #define MAYBE_EncodingChanges DISABLED_EncodingChanges 317 #define MAYBE_EncodingChanges DISABLED_EncodingChanges
353 #else 318 #else
354 #define MAYBE_EncodingChanges EncodingChanges 319 #define MAYBE_EncodingChanges EncodingChanges
355 #endif 320 #endif
356 TEST_F(ScriptStreamingTest, MAYBE_EncodingChanges) 321 TEST_F(ScriptStreamingTest, MAYBE_EncodingChanges)
357 { 322 {
358 // It's possible that the encoding of the Resource changes after we start 323 // It's possible that the encoding of the Resource changes after we start
359 // loading it. 324 // loading it.
360 m_resource->setEncoding("windows-1252"); 325 m_resource->setEncoding("windows-1252");
361 326
362 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 327 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
363 TestScriptResourceClient client; 328 TestScriptResourceClient client;
364 pendingScript().watchForLoad(&client); 329 pendingScript()->watchForLoad(&client);
365 330
366 m_resource->setEncoding("UTF-8"); 331 m_resource->setEncoding("UTF-8");
367 // \xec\x92\x81 are the raw bytes for \uc481. 332 // \xec\x92\x81 are the raw bytes for \uc481.
368 appendData("function foo() { var foob\xec\x92\x81r = 13; return foob\xec\x92 \x81r; } foo();"); 333 appendData("function foo() { var foob\xec\x92\x81r = 13; return foob\xec\x92 \x81r; } foo();");
369 334
370 finish(); 335 finish();
371 336
372 processTasksUntilStreamingComplete(); 337 processTasksUntilStreamingComplete();
373 EXPECT_TRUE(client.finished()); 338 EXPECT_TRUE(client.finished());
374 bool errorOccurred = false; 339 bool errorOccurred = false;
375 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 340 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
376 EXPECT_FALSE(errorOccurred); 341 EXPECT_FALSE(errorOccurred);
377 EXPECT_TRUE(sourceCode.streamer()); 342 EXPECT_TRUE(sourceCode.streamer());
378 v8::TryCatch tryCatch(isolate()); 343 v8::TryCatch tryCatch(isolate());
379 v8::Local<v8::Script> script; 344 v8::Local<v8::Script> script;
380 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript)); 345 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript));
381 EXPECT_FALSE(tryCatch.HasCaught()); 346 EXPECT_FALSE(tryCatch.HasCaught());
382 } 347 }
383 348
384 349
385 #if OS(MACOSX) && defined(ADDRESS_SANITIZER) 350 #if OS(MACOSX) && defined(ADDRESS_SANITIZER)
386 // TODO(marja): Fix this test, http://crbug.com/572987 351 // TODO(marja): Fix this test, http://crbug.com/572987
387 #define MAYBE_EncodingFromBOM DISABLED_EncodingFromBOM 352 #define MAYBE_EncodingFromBOM DISABLED_EncodingFromBOM
388 #else 353 #else
389 #define MAYBE_EncodingFromBOM EncodingFromBOM 354 #define MAYBE_EncodingFromBOM EncodingFromBOM
390 #endif 355 #endif
391 TEST_F(ScriptStreamingTest, MAYBE_EncodingFromBOM) 356 TEST_F(ScriptStreamingTest, MAYBE_EncodingFromBOM)
392 { 357 {
393 // Byte order marks should be removed before giving the data to V8. They 358 // Byte order marks should be removed before giving the data to V8. They
394 // will also affect encoding detection. 359 // will also affect encoding detection.
395 m_resource->setEncoding("windows-1252"); // This encoding is wrong on purpos e. 360 m_resource->setEncoding("windows-1252"); // This encoding is wrong on purpos e.
396 361
397 ScriptStreamer::startStreaming(pendingScript(), PendingScript::ParsingBlocki ng, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner); 362 ScriptStreamer::startStreaming(pendingScript(), ScriptStreamer::ParsingBlock ing, m_settings.get(), m_scope.scriptState(), m_loadingTaskRunner);
398 TestScriptResourceClient client; 363 TestScriptResourceClient client;
399 pendingScript().watchForLoad(&client); 364 pendingScript()->watchForLoad(&client);
400 365
401 // \xef\xbb\xbf is the UTF-8 byte order mark. \xec\x92\x81 are the raw bytes 366 // \xef\xbb\xbf is the UTF-8 byte order mark. \xec\x92\x81 are the raw bytes
402 // for \uc481. 367 // for \uc481.
403 appendData("\xef\xbb\xbf function foo() { var foob\xec\x92\x81r = 13; return foob\xec\x92\x81r; } foo();"); 368 appendData("\xef\xbb\xbf function foo() { var foob\xec\x92\x81r = 13; return foob\xec\x92\x81r; } foo();");
404 369
405 finish(); 370 finish();
406 processTasksUntilStreamingComplete(); 371 processTasksUntilStreamingComplete();
407 EXPECT_TRUE(client.finished()); 372 EXPECT_TRUE(client.finished());
408 bool errorOccurred = false; 373 bool errorOccurred = false;
409 ScriptSourceCode sourceCode = pendingScript().getSource(KURL(), errorOccurre d); 374 ScriptSourceCode sourceCode = pendingScript()->getSource(KURL(), errorOccurr ed);
410 EXPECT_FALSE(errorOccurred); 375 EXPECT_FALSE(errorOccurred);
411 EXPECT_TRUE(sourceCode.streamer()); 376 EXPECT_TRUE(sourceCode.streamer());
412 v8::TryCatch tryCatch(isolate()); 377 v8::TryCatch tryCatch(isolate());
413 v8::Local<v8::Script> script; 378 v8::Local<v8::Script> script;
414 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript)); 379 EXPECT_TRUE(V8ScriptRunner::compileScript(sourceCode, isolate()).ToLocal(&sc ript));
415 EXPECT_FALSE(tryCatch.HasCaught()); 380 EXPECT_FALSE(tryCatch.HasCaught());
416 } 381 }
417 382
418 } // namespace 383 } // namespace
419 384
420 } // namespace blink 385 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698