void JavaScriptDebugServer::pauseIfNeeded(Page* page) { if (m_paused) return; if (!page || !hasListenersInterestedInPage(page)) return; bool pauseNow = m_pauseOnNextStatement; pauseNow |= (m_pauseOnCallFrame == m_currentCallFrame); pauseNow |= (m_currentCallFrame->line() > 0 && hasBreakpoint(m_currentCallFrame->sourceIdentifier(), m_currentCallFrame->line())); if (!pauseNow) return; m_pauseOnCallFrame = 0; m_pauseOnNextStatement = false; m_paused = true; dispatchFunctionToListeners(&JavaScriptDebugListener::didPause, page); setJavaScriptPaused(page->group(), true); TimerBase::fireTimersInNestedEventLoop(); EventLoop loop; m_doneProcessingDebuggerEvents = false; while (!m_doneProcessingDebuggerEvents && !loop.ended()) loop.cycle(); setJavaScriptPaused(page->group(), false); m_paused = false; }
void ScriptDebugServer::pauseIfNeeded(JSGlobalObject* dynamicGlobalObject) { if (m_paused) return; if (!getListenersForGlobalObject(dynamicGlobalObject)) return; bool pauseNow = m_pauseOnNextStatement; pauseNow |= (m_pauseOnCallFrame == m_currentCallFrame); pauseNow |= hasBreakpoint(m_currentCallFrame->sourceID(), m_currentCallFrame->position()); if (!pauseNow) return; m_pauseOnCallFrame = 0; m_pauseOnNextStatement = false; m_paused = true; dispatchFunctionToListeners(&ScriptDebugServer::dispatchDidPause, dynamicGlobalObject); didPause(dynamicGlobalObject); TimerBase::fireTimersInNestedEventLoop(); EventLoop loop; m_doneProcessingDebuggerEvents = false; while (!m_doneProcessingDebuggerEvents && !loop.ended()) loop.cycle(); didContinue(dynamicGlobalObject); dispatchFunctionToListeners(&ScriptDebugServer::dispatchDidContinue, dynamicGlobalObject); m_paused = false; }
void PageScriptDebugServer::runEventLoopWhilePausedInternal() { TimerBase::fireTimersInNestedEventLoop(); EventLoop loop; while (!m_doneProcessingDebuggerEvents && !loop.ended()) loop.cycle(); }
void ResourceHandle::platformLoadResourceSynchronously(NetworkingContext* context, const ResourceRequest& request, StoredCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data) { if (!context || !context->isValid()) { ASSERT(false && "loadResourceSynchronously called with invalid networking context"); return; } // FIXME: clean up use of Frame now that we have NetworkingContext (see RIM Bug #1515) Frame* frame = static_cast<FrameNetworkingContextBlackBerry*>(context)->frame(); if (!frame || !frame->loader() || !frame->loader()->client() || !frame->page()) { ASSERT(false && "loadResourceSynchronously called without a frame or frame client"); return; } PageGroupLoadDeferrer deferrer(frame->page(), true); TimerBase::fireTimersInNestedEventLoop(); int playerId = static_cast<FrameLoaderClientBlackBerry*>(frame->loader()->client())->playerId(); WebCoreSynchronousLoader syncLoader; bool defersLoading = false; bool shouldContentSniff = false; RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(context, request, &syncLoader, defersLoading, shouldContentSniff)); int status = NetworkManager::instance()->startJob(playerId, handle, frame, defersLoading); if (status != BlackBerry::Platform::FilterStream::StatusSuccess) { handle->cancel(); error = ResourceError(ResourceError::platformErrorDomain, status, request.url().string(), BlackBerry::Platform::String::emptyString()); return; } const double syncLoadTimeOut = 60; // seconds double startTime = currentTime(); EventLoop loop; while (!syncLoader.isDone() && !loop.ended()) { loop.cycle(); if (currentTime() - startTime > syncLoadTimeOut) { handle->cancel(); error = ResourceError(ResourceError::platformErrorDomain, BlackBerry::Platform::FilterStream::StatusNetworkError, request.url().string(), "Time out"); return; } } error = syncLoader.resourceError(); data = syncLoader.data(); response = syncLoader.resourceResponse(); }
void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame* frame) { if (!frame || !frame->loader() || !frame->loader()->client() || !frame->page()) { ASSERT(false && "loadResourceSynchronously called without a frame or frame client"); return; } PageGroupLoadDeferrer deferrer(frame->page(), true); int playerId = static_cast<FrameLoaderClientBlackBerry*>(frame->loader()->client())->playerId(); WebCoreSynchronousLoader syncLoader; bool defersLoading = false; bool shouldContentSniff = false; RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, defersLoading, shouldContentSniff)); NetworkManager::instance()->startJob(playerId, handle, *frame, defersLoading); static const double s_syncLoadTimeOut = 60.0; // seconds double startTime = currentTime(); EventLoop loop; while (!syncLoader.isDone() && !loop.ended()) { loop.cycle(); if (currentTime() - startTime > s_syncLoadTimeOut) { handle->cancel(); error = ResourceError(ResourceError::platformErrorDomain, Olympia::Platform::IStream::StatusNetworkError, request.url().string(), "Time out"); return; } } error = syncLoader.resourceError(); data = syncLoader.data(); response = syncLoader.resourceResponse(); }