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

Side by Side Diff: trunk/Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp

Issue 309503013: Revert 174956 "Oilpan: Move ThreadableWebSocketChannelClientWrap..." (Closed) Base URL: svn://svn.chromium.org/blink/
Patch Set: Created 6 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 m_bridge->suspend(); 221 m_bridge->suspend();
222 } 222 }
223 223
224 void WorkerThreadableWebSocketChannel::resume() 224 void WorkerThreadableWebSocketChannel::resume()
225 { 225 {
226 m_workerClientWrapper->resume(); 226 m_workerClientWrapper->resume();
227 if (m_bridge) 227 if (m_bridge)
228 m_bridge->resume(); 228 m_bridge->resume();
229 } 229 }
230 230
231 void WorkerThreadableWebSocketChannel::trace(Visitor* visitor) 231 WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > re ference, PassRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, Work erLoaderProxy& loaderProxy, ExecutionContext* context, const String& sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper )
232 {
233 visitor->trace(m_workerClientWrapper);
234 WebSocketChannel::trace(visitor);
235 }
236
237 WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > re ference, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientW rapper, WorkerLoaderProxy& loaderProxy, ExecutionContext* context, const String& sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper > syncHelper)
238 : m_workerClientWrapper(clientWrapper) 232 : m_workerClientWrapper(clientWrapper)
239 , m_loaderProxy(loaderProxy) 233 , m_loaderProxy(loaderProxy)
240 , m_mainWebSocketChannel(nullptr) 234 , m_mainWebSocketChannel(nullptr)
241 , m_syncHelper(syncHelper) 235 , m_syncHelper(syncHelper)
242 , m_weakFactory(reference, this) 236 , m_weakFactory(reference, this)
243 { 237 {
244 ASSERT(isMainThread()); 238 ASSERT(isMainThread());
245 ASSERT(m_workerClientWrapper.get()); 239 ASSERT(m_workerClientWrapper.get());
246 240
247 Document* document = toDocument(context); 241 Document* document = toDocument(context);
248 if (RuntimeEnabledFeatures::experimentalWebSocketEnabled()) { 242 if (RuntimeEnabledFeatures::experimentalWebSocketEnabled()) {
249 m_mainWebSocketChannel = NewWebSocketChannelImpl::create(document, this, sourceURL, lineNumber); 243 m_mainWebSocketChannel = NewWebSocketChannelImpl::create(document, this, sourceURL, lineNumber);
250 } else { 244 } else {
251 m_mainWebSocketChannel = MainThreadWebSocketChannel::create(document, th is, sourceURL, lineNumber); 245 m_mainWebSocketChannel = MainThreadWebSocketChannel::create(document, th is, sourceURL, lineNumber);
252 } 246 }
253 247
254 m_syncHelper->signalWorkerThread(); 248 m_syncHelper->signalWorkerThread();
255 } 249 }
256 250
257 WorkerThreadableWebSocketChannel::Peer::~Peer() 251 WorkerThreadableWebSocketChannel::Peer::~Peer()
258 { 252 {
259 ASSERT(isMainThread()); 253 ASSERT(isMainThread());
260 if (m_mainWebSocketChannel) 254 if (m_mainWebSocketChannel)
261 m_mainWebSocketChannel->disconnect(); 255 m_mainWebSocketChannel->disconnect();
262 } 256 }
263 257
264 void WorkerThreadableWebSocketChannel::Peer::initialize(ExecutionContext* contex t, PassRefPtr<WeakReference<Peer> > reference, WorkerLoaderProxy* loaderProxy, P assRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, co nst String& sourceURLAtConnection, unsigned lineNumberAtConnection, PassOwnPtr<T hreadableWebSocketChannelSyncHelper> syncHelper) 258 void WorkerThreadableWebSocketChannel::Peer::initialize(ExecutionContext* contex t, PassRefPtr<WeakReference<Peer> > reference, WorkerLoaderProxy* loaderProxy, P assRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, const String& sourceURLAtConnection, unsigned lineNumberAtConnection, PassOwnPtr<ThreadableWeb SocketChannelSyncHelper> syncHelper)
265 { 259 {
266 // The caller must call destroy() to free the peer. 260 // The caller must call destroy() to free the peer.
267 new Peer(reference, clientWrapper, *loaderProxy, context, sourceURLAtConnect ion, lineNumberAtConnection, syncHelper); 261 new Peer(reference, clientWrapper, *loaderProxy, context, sourceURLAtConnect ion, lineNumberAtConnection, syncHelper);
268 } 262 }
269 263
270 void WorkerThreadableWebSocketChannel::Peer::destroy() 264 void WorkerThreadableWebSocketChannel::Peer::destroy()
271 { 265 {
272 ASSERT(isMainThread()); 266 ASSERT(isMainThread());
273 delete this; 267 delete this;
274 } 268 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 361 }
368 362
369 void WorkerThreadableWebSocketChannel::Peer::resume() 363 void WorkerThreadableWebSocketChannel::Peer::resume()
370 { 364 {
371 ASSERT(isMainThread()); 365 ASSERT(isMainThread());
372 if (!m_mainWebSocketChannel) 366 if (!m_mainWebSocketChannel)
373 return; 367 return;
374 m_mainWebSocketChannel->resume(); 368 m_mainWebSocketChannel->resume();
375 } 369 }
376 370
377 static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtrWil lBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const St ring& subprotocol, const String& extensions) 371 static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtr<Th readableWebSocketChannelClientWrapper> workerClientWrapper, const String& subpro tocol, const String& extensions)
378 { 372 {
379 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 373 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
380 workerClientWrapper->setSubprotocol(subprotocol); 374 workerClientWrapper->setSubprotocol(subprotocol);
381 workerClientWrapper->setExtensions(extensions); 375 workerClientWrapper->setExtensions(extensions);
382 workerClientWrapper->didConnect(); 376 workerClientWrapper->didConnect();
383 } 377 }
384 378
385 void WorkerThreadableWebSocketChannel::Peer::didConnect() 379 void WorkerThreadableWebSocketChannel::Peer::didConnect()
386 { 380 {
387 ASSERT(isMainThread()); 381 ASSERT(isMainThread());
388 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidConnect, m_workerClientWrapper.get(), m_mainWebSocketChannel->subprotocol( ), m_mainWebSocketChannel->extensions())); 382 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidConnect, m_workerClientWrapper, m_mainWebSocketChannel->subprotocol(), m_m ainWebSocketChannel->extensions()));
389 } 383 }
390 384
391 static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRe fPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, c onst String& message) 385 static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRe fPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const String& message)
392 { 386 {
393 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 387 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
394 workerClientWrapper->didReceiveMessage(message); 388 workerClientWrapper->didReceiveMessage(message);
395 } 389 }
396 390
397 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessage(const String& mes sage) 391 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessage(const String& mes sage)
398 { 392 {
399 ASSERT(isMainThread()); 393 ASSERT(isMainThread());
400 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessage, m_workerClientWrapper.get(), message)); 394 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessage, m_workerClientWrapper, message));
401 } 395 }
402 396
403 static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, Pas sRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper , PassOwnPtr<Vector<char> > binaryData) 397 static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, Pas sRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassOwnPtr <Vector<char> > binaryData)
404 { 398 {
405 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 399 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
406 workerClientWrapper->didReceiveBinaryData(binaryData); 400 workerClientWrapper->didReceiveBinaryData(binaryData);
407 } 401 }
408 402
409 void WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData(PassOwnPtr<Vec tor<char> > binaryData) 403 void WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData(PassOwnPtr<Vec tor<char> > binaryData)
410 { 404 {
411 ASSERT(isMainThread()); 405 ASSERT(isMainThread());
412 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveBinaryData, m_workerClientWrapper.get(), binaryData)); 406 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveBinaryData, m_workerClientWrapper, binaryData));
413 } 407 }
414 408
415 static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrap per, unsigned long bufferedAmount) 409 static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigne d long bufferedAmount)
416 { 410 {
417 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 411 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
418 workerClientWrapper->didUpdateBufferedAmount(bufferedAmount); 412 workerClientWrapper->didUpdateBufferedAmount(bufferedAmount);
419 } 413 }
420 414
421 void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned lo ng bufferedAmount) 415 void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned lo ng bufferedAmount)
422 { 416 {
423 ASSERT(isMainThread()); 417 ASSERT(isMainThread());
424 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidUpdateBufferedAmount, m_workerClientWrapper.get(), bufferedAmount)); 418 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidUpdateBufferedAmount, m_workerClientWrapper, bufferedAmount));
425 } 419 }
426 420
427 static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWra pper) 421 static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper)
428 { 422 {
429 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 423 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
430 workerClientWrapper->didStartClosingHandshake(); 424 workerClientWrapper->didStartClosingHandshake();
431 } 425 }
432 426
433 void WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake() 427 void WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake()
434 { 428 {
435 ASSERT(isMainThread()); 429 ASSERT(isMainThread());
436 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidStartClosingHandshake, m_workerClientWrapper.get())); 430 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidStartClosingHandshake, m_workerClientWrapper));
437 } 431 }
438 432
439 static void workerGlobalScopeDidClose(ExecutionContext* context, PassRefPtrWillB eRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned l ong unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionS tatus closingHandshakeCompletion, unsigned short code, const String& reason) 433 static void workerGlobalScopeDidClose(ExecutionContext* context, PassRefPtr<Thre adableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long unhandle dBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closin gHandshakeCompletion, unsigned short code, const String& reason)
440 { 434 {
441 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 435 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
442 workerClientWrapper->didClose(unhandledBufferedAmount, closingHandshakeCompl etion, code, reason); 436 workerClientWrapper->didClose(unhandledBufferedAmount, closingHandshakeCompl etion, code, reason);
443 } 437 }
444 438
445 void WorkerThreadableWebSocketChannel::Peer::didClose(unsigned long unhandledBuf feredAmount, ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsign ed short code, const String& reason) 439 void WorkerThreadableWebSocketChannel::Peer::didClose(unsigned long unhandledBuf feredAmount, ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsign ed short code, const String& reason)
446 { 440 {
447 ASSERT(isMainThread()); 441 ASSERT(isMainThread());
448 m_mainWebSocketChannel = nullptr; 442 m_mainWebSocketChannel = nullptr;
449 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidClose, m_workerClientWrapper.get(), unhandledBufferedAmount, closingHandsh akeCompletion, code, reason)); 443 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidClose, m_workerClientWrapper, unhandledBufferedAmount, closingHandshakeCom pletion, code, reason));
450 } 444 }
451 445
452 static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, P assRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapp er) 446 static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, P assRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper)
453 { 447 {
454 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 448 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
455 workerClientWrapper->didReceiveMessageError(); 449 workerClientWrapper->didReceiveMessageError();
456 } 450 }
457 451
458 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError() 452 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError()
459 { 453 {
460 ASSERT(isMainThread()); 454 ASSERT(isMainThread());
461 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessageError, m_workerClientWrapper.get())); 455 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessageError, m_workerClientWrapper));
462 } 456 }
463 457
464 WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtrWillBeRawPtr<Threadab leWebSocketChannelClientWrapper> workerClientWrapper, WorkerGlobalScope& workerG lobalScope) 458 WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtr<ThreadableWebSocketC hannelClientWrapper> workerClientWrapper, WorkerGlobalScope& workerGlobalScope)
465 : m_workerClientWrapper(workerClientWrapper) 459 : m_workerClientWrapper(workerClientWrapper)
466 , m_workerGlobalScope(workerGlobalScope) 460 , m_workerGlobalScope(workerGlobalScope)
467 , m_loaderProxy(m_workerGlobalScope->thread()->workerLoaderProxy()) 461 , m_loaderProxy(m_workerGlobalScope->thread()->workerLoaderProxy())
468 , m_syncHelper(0) 462 , m_syncHelper(0)
469 { 463 {
470 ASSERT(m_workerClientWrapper.get()); 464 ASSERT(m_workerClientWrapper.get());
471 } 465 }
472 466
473 WorkerThreadableWebSocketChannel::Bridge::~Bridge() 467 WorkerThreadableWebSocketChannel::Bridge::~Bridge()
474 { 468 {
475 disconnect(); 469 disconnect();
476 } 470 }
477 471
478 void WorkerThreadableWebSocketChannel::Bridge::initialize(const String& sourceUR L, unsigned lineNumber) 472 void WorkerThreadableWebSocketChannel::Bridge::initialize(const String& sourceUR L, unsigned lineNumber)
479 { 473 {
480 RefPtr<WeakReference<Peer> > reference = WeakReference<Peer>::createUnbound( ); 474 RefPtr<WeakReference<Peer> > reference = WeakReference<Peer>::createUnbound( );
481 m_peer = WeakPtr<Peer>(reference); 475 m_peer = WeakPtr<Peer>(reference);
482 476
483 OwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper = ThreadableWebSocke tChannelSyncHelper::create(adoptPtr(blink::Platform::current()->createWaitableEv ent())); 477 OwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper = ThreadableWebSocke tChannelSyncHelper::create(adoptPtr(blink::Platform::current()->createWaitableEv ent()));
484 // This pointer is guaranteed to be valid until we call terminatePeer. 478 // This pointer is guaranteed to be valid until we call terminatePeer.
485 m_syncHelper = syncHelper.get(); 479 m_syncHelper = syncHelper.get();
486 480
487 RefPtr<Bridge> protect(this); 481 RefPtr<Bridge> protect(this);
488 if (!waitForMethodCompletion(createCallbackTask(&Peer::initialize, reference .release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper.get(), sourceURL, lineNumber, syncHelper.release()))) { 482 if (!waitForMethodCompletion(createCallbackTask(&Peer::initialize, reference .release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper, sourc eURL, lineNumber, syncHelper.release()))) {
489 // The worker thread has been signalled to shutdown before method comple tion. 483 // The worker thread has been signalled to shutdown before method comple tion.
490 terminatePeer(); 484 terminatePeer();
491 } 485 }
492 } 486 }
493 487
494 bool WorkerThreadableWebSocketChannel::Bridge::connect(const KURL& url, const St ring& protocol) 488 bool WorkerThreadableWebSocketChannel::Bridge::connect(const KURL& url, const St ring& protocol)
495 { 489 {
496 if (hasTerminatedPeer()) 490 if (hasTerminatedPeer())
497 return false; 491 return false;
498 492
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::destroy, m_peer))); 617 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::destroy, m_peer)));
624 // Peer::destroy() deletes m_peer and then m_syncHelper will be released. 618 // Peer::destroy() deletes m_peer and then m_syncHelper will be released.
625 // We must not touch m_syncHelper any more. 619 // We must not touch m_syncHelper any more.
626 m_syncHelper = 0; 620 m_syncHelper = 0;
627 621
628 // We won't use this any more. 622 // We won't use this any more.
629 m_workerGlobalScope = nullptr; 623 m_workerGlobalScope = nullptr;
630 } 624 }
631 625
632 } // namespace WebCore 626 } // namespace WebCore
OLDNEW
« no previous file with comments | « trunk/Source/modules/websockets/WorkerThreadableWebSocketChannel.h ('k') | trunk/Source/platform/CrossThreadCopier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698