void SynchronousResourceHandleCFURLConnectionDelegate::setupConnectionScheduling(CFURLConnectionRef connection) { #if PLATFORM(WIN) CFURLConnectionScheduleWithCurrentMessageQueue(connection); #elif PLATFORM(IOS) CFURLConnectionScheduleWithRunLoop(connection, WebThreadRunLoop(), kCFRunLoopDefaultMode); #else CFURLConnectionScheduleWithRunLoop(connection, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); #endif CFURLConnectionScheduleDownloadWithRunLoop(connection, loaderRunLoop(), kCFRunLoopDefaultMode); }
static CFRunLoopRef currentRunLoop() { #if PLATFORM(IOS) // A race condition during WebView deallocation can lead to a crash if the layer sync run loop // observer is added to the main run loop <rdar://problem/9798550>. However, for responsiveness, // we still allow this, see <rdar://problem/7403328>. Since the race condition and subsequent // crash are especially troublesome for iBooks, we never allow the observer to be added to the // main run loop in iBooks. if (applicationIsIBooksOnIOS()) return WebThreadRunLoop(); #endif return CFRunLoopGetCurrent(); }
VM& commonVMSlow() { ASSERT(isMainThread()); ASSERT(!g_commonVMOrNull); ScriptController::initializeThreading(); g_commonVMOrNull = &VM::createLeaked(LargeHeap).leakRef(); g_commonVMOrNull->heap.acquireAccess(); // At any time, we may do things that affect the GC. #if !PLATFORM(IOS) g_commonVMOrNull->setExclusiveThread(std::this_thread::get_id()); #else g_commonVMOrNull->heap.setRunLoop(WebThreadRunLoop()); g_commonVMOrNull->heap.machineThreads().addCurrentThread(); #endif g_commonVMOrNull->setGlobalConstRedeclarationShouldThrow(Settings::globalConstRedeclarationShouldThrow()); g_commonVMOrNull->heap.addMutatorShouldBeFencedCache(g_opaqueRootWriteBarrierEnabled); initNormalWorldClientData(g_commonVMOrNull); return *g_commonVMOrNull; }
bool ResourceHandle::start(NetworkingContext* context) { if (!context) return false; // If NetworkingContext is invalid then we are no longer attached to a Page, // this must be an attempted load from an unload handler, so let's just block it. if (!context->isValid()) return false; bool shouldUseCredentialStorage = !client() || client()->shouldUseCredentialStorage(this); createCFURLConnection(shouldUseCredentialStorage, d->m_shouldContentSniff, client()->connectionProperties(this)); CFURLConnectionScheduleWithRunLoop(d->m_connection.get(), WebThreadRunLoop(), kCFRunLoopDefaultMode); CFURLConnectionScheduleDownloadWithRunLoop(d->m_connection.get(), loaderRunLoop(), kCFRunLoopDefaultMode); CFURLConnectionStart(d->m_connection.get()); LOG(Network, "CFNet - Starting URL %s (handle=%p, conn=%p)", firstRequest().url().string().utf8().data(), this, d->m_connection.get()); return true; }